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