Подтвердить что ты не робот

Visual Studio 2015 Analyzer выбрал исключение

После обновления от VS 2015 Update 1 RC до VS 2015 Update 1, я получаю следующее сообщение об ошибке:

Анализатор 'Microsoft.CodeAnalysis.VisualBasic.CodeFixes.SimplifyTypeNames.VisualBasicSimplifyTypeNamesDiagnosticAnalyzer' выбрал исключение типа "System.ArgumentNullException" с сообщением "Значение не может быть нулевым. Имя параметра: source '

в одном из моих проектов. Анализ кода отключен в этом проекте (как и во всех моих проектах в решении), поэтому я попытался включить его и выключить, но все тот же вопрос.

Кажется, что я все еще могу создавать и запускать свое решение, но на самом деле все не работает должным образом после обновления:

  • все работает очень медленно
  • после внесения изменений и его создания не применяются изменения.

У кого-нибудь еще была эта проблема после недавнего обновления или, возможно, даже раньше?

Потенциальный обход, найденный здесь: https://github.com/dotnet/roslyn/issues/6682, отправленный пользователем dpoeschl.

И это его оригинальный текст:

Временное решение. Установите этот флажок: Инструменты | Варианты | Текстовый редактор | основной | Стиль кода | Квалифицировать доступ членов с помощью "Me"

решение dpoeschl

Это обходное решение имеет два побочных эффекта (о которых я могу думать до сих пор):

1. У вас больше не будет визуального индикатора избыточного Me. или связанное с ним исправление кода, или опции "Исправить все вхождения" в легко достичь соответствия.

2. Любые функции генерации кода, которые генерируют полностью квалифицированные членские обращения и зависят от Упротивления, чтобы удалить их, если это необходимо (или явным образом проверяю этот параметр) теперь будут генерировать несоответствующие по умолчанию.

Включение этой опции особенно неинвазивно в VS2015 & VS2015 Update 1, потому что этот параметр применяется только в одном направлении. То есть флажок, который не установлен, означает, что анализатор работает, делает некоторый более глубокий анализ (который в этом случае не подходит), и предлагает вам лампочку, когда у вас есть квалифицированные доступа к члену, в то время как флажок будучи проверенным, означает, что мы очень быстро отказываемся от более глубокого анализа и вы не получите никаких лампочек, говорящих вам добавить Меня. квалификация.

Это сработало для меня, это может также решить проблему для других.

4b9b3361

Ответ 1

30 марта 2016 года Microsoft выпустила новое обновление для Visual Studio.

После установки Visual Studio Update 2 проблема, похоже, исчезнет. Это VS Update 2 и Замечания о выпуске VS Update 2

Проверка примечаний к выпуску, это единственное, что они коснулись анализатора:

Мы сделали усовершенствования API анализатора, в том числе позволяя авторам анализатора маркировать их анализаторы для одновременного выполнения и обеспечивать контроль над тем, выполняются ли анализаторы в сгенерированном коде.

Ответ 2

Обновление:

По-видимому, общая проблема заключается в том, что помощник кода помещает вызовы в классы классов, когда используется имя класса.

Например

Private Shared Property Instance as Class1

Public Shared Function DefInstance1() as Class1
  ' This causes the warning
  Return Class1.Instance
End Function

Public Shared Function DefInstance2() as Class1
  ' This is okay
  Return Instance
End Function

Например, я присвоил значение Синхронизирующему объекту при наследовании от System.Timers.Timer как:

MyBase.SynchronizingObject = value 

Вместо

SynchronizingObject = value 

Помощник VS Code обнаружил это как имя типа, которое можно упростить.

Обратите внимание, что при каждом запуске VS добавляется новое предупреждение.

Update:

Похоже, что другой виновник находится в коде, создаваемом Visual Studio в Application.Designer.vb:

this

Global.Microsoft.VisualBasic.ApplicationServices

помечен для упрощения

ApplicationServices

Кажется, что Code Assistant стал немного агрессивным, но QA не заметил проблем.