adv*_*v12 9 c# edit-and-continue visual-studio roslyn visual-studio-2015
我在Visual Studio 2015中调试.NET 4.0应用程序.我的应用程序构建并运行良好,但是当我尝试编辑并在调试器下运行时继续运行时,无论我做了什么更改或在主项目中将它们放在何处,我得到一个对话框说:
编辑是无法编译的.在修复编译器错误之前,执行无法继续.
作为我正在谈论的那种变化的一个例子,我尝试用各种方法添加这一行:
Console.WriteLine("foo");
Run Code Online (Sandbox Code Playgroud)
当我查看Visual Studio的错误列表窗格时,我只看到一个错误CS7038,其描述为"无法发出模块<my app name>
".没有给出文件名,行号或字符.我的代码中没有潦草的红色下划线.如果我停止正在运行的应用程序,使用更改进行构建,然后再次运行,则所有内容都会构建并运行正常.因此,构建时编译器和编辑并继续编译器认为可接受的内容之间似乎存在一些差异.
有没有人知道如何在编辑和继续模式下获得有关编译失败原因的更多信息?我读了一些关于附加和调试VBCSCompiler进程的内容,所以我尝试了,但即使抛出所有异常类型设置为break,附加的VS也从未破坏.
我没有共享任何代码,因为这不是关于我的代码的问题,而是关于找出编辑和继续编译器认为错误的策略,并且据我所知,编译器错误的来源可能在我的任何地方整个项目.
编辑:
正如评论中所提到的,我能够将调试器附加到Visual Studio,并在编辑代码后单击"继续"时抛出异常时中断.例外情况是System.NotSupportedException
以下消息:"在调试期间不允许更改程序集引用的版本".它列出了有问题的程序集的名称,这是我的应用程序使用的一个小型VB.Net项目,主要在C#中.我正在尝试建立一个MCVE来提交给微软,但目前我无法用一个VB和一个C#项目在一个较小的解决方案中重现问题.
编辑2:
我找到了一个解决方法,并自行回答了问题,以防其他任何人遇到这个奇怪的问题,但我正在为任何能够解释发生了什么的人保留"已回答"的复选标记(为什么编译器认为版本号为在编辑期间引用的项目已更改).
我找到了解决该问题的方法,但我不完全明白发生了什么。在编辑并继续编译器表示程序集版本正在更改的 VB.NET 项目中,有一个名为“AssemblyInfo.vb”的文件。该文件包含以下行:
<Assembly: AssemblyVersion("3.0.*")>
Run Code Online (Sandbox Code Playgroud)
还可以通过“应用程序”选项卡中的“程序集信息”按钮在项目属性中设置程序集版本:
当我从 AssemblyInfo.vb 中删除该AssemblyVersion
行时,我的“编辑并继续”问题就消失了。起初我认为这是因为“程序集信息”窗口中的字段与 AssemblyInfo.vb 保存到不同的文件中,并且两者之间存在一些冲突,但现在我发现“程序集信息”窗口只是编辑 AssemblyInfo 的便捷方法.vb:如果我删除 AssemblyInfo.vb 中的行,它会在“程序集信息”窗口中被清除。
经过更多实验后,版本号中的星号似乎是罪魁祸首。如果我完全指定程序集版本,我的“编辑并继续”问题就会消失。并且引用的项目必须是 VB.NET 项目。我在 C# 项目中尝试了相同的设置,并且可以正常编辑并继续。
这似乎是一个非常边缘的情况,我将向 Microsoft 提交一份错误报告,但与此同时,我很想知道编译器到底发生了什么——为什么它会得到两个不同的汇编版本在调试过程中确实不需要重新编译的程序集...如果您对所发生的情况有一个很好的解释,请将其添加为答案。
编辑:这是我提交的错误报告。
归档时间: |
|
查看次数: |
2640 次 |
最近记录: |