Visual Studio 2015分析器抛出了异常。

11

在从VS 2015 Update 1 RC更新到VS 2015 Update 1后,我不断收到以下错误提示:

分析器'Microsoft.CodeAnalysis.VisualBasic.CodeFixes.SimplifyTypeNames.VisualBasicSimplifyTypeNamesDiagnosticAnalyzer'引发了一个类型为'System.ArgumentNullException'的异常,消息为‘值不能为null。参数名:source’。

其中一个我的项目中出现了这个问题。在该项目上,代码分析被禁用(因为在解决方案中的所有项目上都是如此),所以我尝试打开和关闭它,但问题仍然存在。

似乎我仍然可以构建和运行我的解决方案,但升级后事情似乎并没有真正正常工作:

  • 一切都运行得非常慢。
  • 进行更改并构建后,它不会应用更改。

有其他人在最近的更新后或之前遇到过这个问题吗?

在这里找到的可能的解决方法:https://github.com/dotnet/roslyn/issues/6682,由用户dpoeschl发布。

以下是他的原始文本:

解决方法:检查此复选框:工具| 选项| 文本编辑器| 基本| 代码样式| 使用'Me'限定成员访问

dpoeschl's solution

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

1.您将不再得到多余的Me.的可视指示符,也不会得到相关的代码修复或“修复所有出现”选项,以便轻松达到合规性。

2. 任何生成完全限定成员访问并依赖于简化器在适当时删除它们(或者显式检查此选项)的代码生成特性,现在默认会生成不符合规范的代码。

在VS2015和VS2015 Update 1中启用此选项对于系统没有过多的干扰,因为该选项只在一个方向上强制执行。也就是说,未选中复选框意味着分析器运行,进行某些更深层次的分析(在本例中失败),并在您拥有限定成员访问时提供灯泡提示;而选择复选框则意味着我们非常早期地退出更深层次的分析,您就不会得到任何指示要添加Me.资格的灯泡提示。

这对我有效,也可能修复其他人的问题。


我还没有注意到这个问题,但我已经注意到了其他许多“小”问题在这个更新中出现了故障,以至于我完全卸载并重新安装,希望能解决这个问题。目前还无法确定是否成功。 - Dom Sinclair
我之前在更新之前就遇到了各种各样的VS问题,所以我希望这次更新能够解决一些问题,它确实解决了一些问题,但是我还是遇到了其他问题 :( - mrc
相信我,我感同身受,这到底是怎么通过 QA 的我永远不会知道。 - Dom Sinclair
3个回答

3

感谢你的帮忙。我会去查看,希望他们能尽快修复它。 - mrc
它于2015年12月23日被关闭并修复。 - jing
它在2月3日重新开放,然后被关闭并修复。 - mbomb007
在你的链接中发现了一个非常有用的用户(dpoeschl)发布的帖子,看起来对我很有效。我刚刚在问题中发布了它。如上所述,这是一个解决方法而不是实际的修复方法。 - mrc

3
更新:
显然,问题在于代码助手在使用类名时标记了对共享类类型的调用。
例如:
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时都会添加一个新的警告。

更新:

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

this

Global.Microsoft.VisualBasic.ApplicationServices

标记为需要简化

ApplicationServices

看起来代码助手有点过于激进了,没有质量保证注意到手头的问题。


在一个继承自System.Timers.Timer的类中发现了罪魁祸首,我设置了该类的SynchronizingObject属性。 - David

0

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

安装Visual Studio Update 2后,问题似乎已经解决。这是VS Update 2VS Update 2 Release Notes

查看发行说明,他们唯一涉及分析器的改进如下:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接