Visual Studio 2015 Analyzer引发异常

时间:2015-12-02 11:51:42

标签: vb.net visual-studio visual-studio-2015 code-analysis

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

这是他原来的文字:

  

解决方法:选中此复选框:工具|选项|文字编辑器|基本   |代码风格|使用“我”

限定会员访问权限      

dpoeschl's solution

     

这种解决方法有两个副作用(到目前为止我能想到):

     

1。你将不再获得多余的Me的视觉指示。或相关的代码修复,或“修复所有出现的”选项   轻松实现合规。

     

2。任何生成完全限定成员访问权限的代码生成功能,并依赖于简化器在适当时删除它们   (或明确检查此选项)现在将生成不合规   默认情况下代码。

     

在VS2015和VS20中,启用此选项特别具有非侵入性。   VS2015 Update 1,因为此选项仅在一个方向上强制执行。   也就是说,未选中的复选框意味着分析器运行,确实如此   一些更深入的分析(在这种情况下失败),并为您提供   当你有合格的成员访问时,灯泡,同时复选框   被检查意味着我们很早就选择退出更深入的分析   并且你没有得到任何灯泡告诉你加我。资格。

它对我有用,也可以解决别人的问题。

3 个答案:

答案 0 :(得分:3)

更新:

显然,一般问题是代码助手在使用类名时标记对Shared类类型的调用。

例如

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 Assistant将其检测为可以简化的类型名称。

另请注意,每次VS启动时都会添加新警告。

更新

看起来另一个罪魁祸首是Visual Studio在Application.Designer.vb中生成的代码:

这个

Global.Microsoft.VisualBasic.ApplicationServices

标记为简化为

ApplicationServices

如果没有QA注意到手头的问题,Code Assistant似乎有点过于激进。

答案 1 :(得分:3)

这是Update 1中引入的一个缺陷,自2015-10-11以来已经跟踪at Roslyn GitHub as #6682 检查状态更新。

更新: Visual Studio 2015 Update 2 is now out并解决了问题。

答案 2 :(得分:0)

2016年3月30日,Microsoft发布了Visual Studio的新更新。

安装Visual Studio Update 2后,问题似乎消失了。这是VS Update 2VS Update 2 Release Notes

检查发行说明,这是他们唯一涉及的分析器:

  

我们对Analyzer API进行了改进,包括使Analyzer编写器能够标记其分析器以进行并发执行,并控制分析器是否在生成的代码中运行。