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, потому что этот параметр применяется только в одном направлении. То есть флажок, который не установлен, означает, что анализатор работает, делает некоторый более глубокий анализ (который в этом случае не подходит), и предлагает вам лампочку, когда у вас есть квалифицированные доступа к члену, в то время как флажок будучи проверенным, означает, что мы очень быстро отказываемся от более глубокого анализа и вы не получите никаких лампочек, говорящих вам добавить Меня. квалификация.
Это сработало для меня, это может также решить проблему для других.
Ответы
Ответ 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 не заметил проблем.
Ответ 3
Это дефект, введенный в Обновление 1, и он уже отслеживается в Roslyn GitHub как # 6682 с 2015 по 10-11.
Проверьте наличие обновлений статуса.
Обновление: Обновление версии Visual Studio 2015 теперь отсутствует, и проблема там исправлена.