自Visual Studio 2017 15.8版以来,不断发生构建失败(Roslyn / CodeAnalysis)。有任何想法吗?

时间:2018-08-22 14:37:13

标签: msbuild crash visual-studio-2017 roslyn-code-analysis

自Visual Studio 2017版本15.8起,我们团队中的某些计算机上出现了以下非常奇怪的生成错误。

enter image description here

另外,Visual Studio可以识别它

enter image description here

但是IDE本身不会崩溃。

要检查它是否仅发生在我们自己的解决方案上,我创建了一个新的简单命令行工具项目,该项目显示了相同的构建行为。因此,它并不是我们的解决方案所独有的。

我尝试获取help from Microsoft,但似乎他们不知道该怎么做。该线程不会显示我提供给他们的所有材料。他们从我那里得到了许多日志和一个示例项目。无法提供故障转储,因为Visual Studio本身不会崩溃。

修复并完全卸载,新安装的Visual Studio也无济于事。

编辑:它不仅发生在我的开发机器上,而且还发生在我们的构建服务器上(其中有两个)。有趣的是,我们在开发机器上的VM似乎没有这个问题。

4 个答案:

答案 0 :(得分:0)

不幸的是,在这种情况下,您只有三个两个选项:

  1. 您可以尝试描述所有重现此崩溃的步骤,并尽可能详细地描述此步骤中的许多屏幕截图。用于此DOC文件格式,PDF或类似格式。您必须将此文件发送给Visual Studio支持。
  2. 您可以尝试创建故障转储。每次Visual Studio崩溃时,它将在配置的位置中创建转储文件devenv.exe.[number].dmp文件。用这种方法产生的每个转储文件的大小最大为4 GB.。确保将DumpFolder设置在具有足够驱动器空间的位置,或适当调整DumpCount。我知道,您已经在MS论坛上写道,此错误不会创建一个转储。但是,您是否想像一下,您一天要发生10次崩溃,并且每次崩溃都会写入一个4 GB.大小的转储文件? 转储创建通常是禁用的,您必须启用它。如何使用Google中的搜索字符串“ How to enable dump files in Windows”或Windows 10可以找到如何启用它this video。或者,您可以使用编程工具“ ADPlus”来创建内存转储文件和带有来自一个或多个进程的调试输出的日志文件。该工具在this MS Support page中有非常详细的描述。
  3. 您可以尝试自己调试。但是,如果要这样做,您必须看到“ Tools listing Included in Debugging Tools for Windows”。

通常,Visual Studio支持不支持Visual Studio开发人员。您必须对他们好,他们会尽其所能。您不能期望他们都知道。他们按照一些给定的指示来做他们的工作。

在您的情况下,支持人员为您提供了链接Reporting Visual Studio crashes and performance issues,其中您必须阅读以下内容:

  

直接可复制的崩溃

     

直接可复制的崩溃是所有   具有以下特点:

     
      
  1. 可以通过执行一组已知的步骤来观察
  2.   
  3. 可以在多台计算机上观察(如果有)
  4.   
  5. 如果这些步骤涉及打开项目或文档,则可以复制为示例代码或可以链接到或链接到项目的项目   作为反馈的一部分提供
  6.   
     

对于这些问题,请按照“ How to Report a Problem”中的步骤进行操作   并确保包含以下内容:

     
      
  • 重现问题的步骤
  •   
  • 如上所述的独立复制项目。如果这不可能,那么请包括:

         
        
    • 打开的项目的语言(C#,C ++等)
    •   
    • 项目类型(控制台应用程序,ASP.NET等)
    •   
    • 已安装的所有扩展程序。
    •   
  •   
     

最有价值的反馈意见:在这种情况下,最有价值的反馈意见是与问题源一起重现问题的一系列步骤   代码。

     

未知崩溃

     

如果您不确定是什么原因导致崩溃或它们看起来是随机的,   那么您可以在每次Visual Studio崩溃时捕获本地转储,   将它们附加到单独的反馈项中。在以下情况下本地保存转储   Visual Studio崩溃,请设置以下注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe]
"DumpFolder"="C:\\Crashdumps"
"DumpCount"=dword:00000005
"DumpType"=dword:00000002
     

⚠️用此方法生成的每个转储文件的大小最大为4 GB. 。确保将DumpFolder设置在有足够空间的位置   腾出空间或适当调整DumpCount

     

每次Visual Studio崩溃时,它将创建一个转储文件   devenv.exe.[number].dmp文件位于配置位置。

     

然后,使用Visual Studio的“报告问题...” 功能。它会   允许您附加适当的转储。

     
      
  1. 找到您要报告的崩溃的转储文件(查找具有正确创建时间的文件)
  2.   
  3. 如果可能,请在提交反馈之前压缩文件(*.zip)以减小其大小
  4.   
  5. 按照“ How to Report a Problem”中的步骤进行操作,并将堆转储附加到新的反馈项。
  6.   
     

⚠️不要将堆转储附加到现有的反馈项上。请为您想要的每个堆转储创建一个新的反馈项   提交。如果要求您提供堆转储以   解决先前的反馈项目,只需使用   链接到附加了堆转储的新反馈项。

     

最有价值的反馈:在这种情况下,最有价值的反馈是崩溃时捕获的堆转储。

请非常仔细地仔细阅读,最好是连续两次甚至是树次

我希望它能对您有所帮助,并祝您好运!

答案 1 :(得分:0)

在我看来,问题与从GAC加载程序集有关,所以我建议尝试重新安装Microsoft.CodeAnalysis程序集,看看是否有帮助。

要这样做:

  1. Microsoft.CodeAnalysis软件包及其必需的依赖项安装到项目中,请确保记下所有正在下载的程序集。
  2. 以管理员身份运行Visual Studio Developer命令提示符
  3. 使用命令gacutil /u [name of assembly]从GAC卸载现有程序集(对步骤1中的所有程序集执行此操作)
  4. 使用命令gacutil /u [Path to Dll]为所有dll安装新下载的dll(对步骤1中的所有程序集执行此操作)
  5. 从您的项目中删除软件包

我希望这会有所帮助!

答案 2 :(得分:0)

根据Dipen的建议,另一个答案似乎在Microsoft.CodeAnalysis中,请尝试为此安装nuget软件包,如果缺少,请在GAC中重新注册。

如果问题仍然存在,您可以尝试对项目禁用代码分析,例如:

  1. 在VS 2017中的Project中,打开References并右键单击Analyzers,然后单击打开Active Rule Set,如下所示: enter image description here

  2. 取消选中所有规则,这样就不会对您的项目执行任何代码分析,例如: enter image description here

3。保存所有文件,然后尝试重建并运行项目以查看问题是否解决。

答案 3 :(得分:0)

问题是安装了较旧的JustMock版本。只能在罗斯林团队的帮助下解决。