7

我正在调试Visual Studio 2015中的.NET 4.0应用程序。我的应用程序生成并运行良好,但是当我尝试编辑并在调试器下运行时继续,无论我在主项目中做了哪些更改或做出了哪些更改,我都会看到一个对话框,内容如下:错误CS7038(未能发出模块)只在编辑并继续

进行了编辑,但无法编译。执行不能继续 ,直到编译器错误得到解决。

作为排序我谈论变化的一个例子,我试图加入这一行的各种方法:

Console.WriteLine("foo"); 

当我看到在Visual Studio中的错误列表窗格中,我看到只有一个错误,CS7038,描述“无法发射模块'<my app name>'”。没有给出文件名,行号或字符。我的代码中没有扭曲的红色下划线。如果我停止正在运行的应用程序,请使用更改进行构建,然后再次运行,所有内容都将生成并运行良好。所以编译时编译器和编译和继续编译器认为可以接受的东西似乎有一些差异。

有谁知道一种方法来获取更多关于的信息为什么编辑在编辑和继续模式下失败?我读了一些关于连接和调试VBCSCompiler进程的内容,所以我尝试了这一点,但即使所有异常类型在抛出时都设置为中断,附加的VS也不会中断。

我没有分享任何代码,因为这不是关于我的代码的问题,而是有关找出编辑和继续编译器认为是错误的策略,而且我知道编译器错误的来源可能在我整个项目中的任何地方。

编辑:

正如在评论中提到的,我能够调试器附着在Visual Studio和突破时,一个异常被在点击“继续”编辑代码后抛出。例外是System.NotSupportedException,并显示以下消息:“在调试期间不允许更改程序集引用的版本”。它列出了有问题的程序集的名称,这是我的应用程序使用的一个小型VB.Net项目,主要使用C#。我正在尝试构建一个MCVE以提交给Microsoft,但目前我无法在仅使用一个VB和一个C#项目的较小解决方案中重现该问题。

编辑2:

我找到了一个解决方法和自我回答的情况下,任何人的问题遇到过这个奇怪的问题,但我保留了“回答”对号的人谁可以解释发生了什么(为什么编辑器认为引用项目的版本号在编辑过程中发生了变化)。

+0

你是否杀死了VS的所有实例并重新启动?你重置VS设置?如果没有,我会从那里开始。 – David

+0

我已经重新启动VS,是的。没有重置VS设置,这听起来很可怕。有没有办法保存设置,以便在不能解决问题的情况下恢复它们? – adv12

+0

是的。转到工具 - >导入和导出设置。从那里你可以保存当前的设置(导出),重新加载旧的设置(导入)或全部重置。如果您选择全部重置,则下一个屏幕会询问您是否想要先导出当前设置(建议)。 – David

回答

2

我找到了解决该问题的方法,但我不完全理解发生了什么。在其编译版本编辑和继续编译器所说的VB.NET项目发生变化时,有一个名为“AssemblyInfo.vb”的文件。该文件包含以下行:

<Assembly: AssemblyVersion("3.0.*")> 

程序集的版本也可以在项目属性进行设置,通过在应用程序选项卡中的“程序集信息”按钮:

screenshot of Visual Studio's Project Properties for the VB.NET project with AssemblyVersion set in two places

当我删除来自AssemblyInfo.vb的AssemblyVersion行,我的编辑和继续问题消失了。起初我以为这是因为Assembly Information窗口中的字段被保存到AssemblyInfo.vb的另一个文件中,并且两者之间有一些冲突,但是现在我发现Assembly Information窗口只是编辑AssemblyInfo的一个方便方法.vb:如果我删除了AssemblyInfo.vb中的行,它将在Assembly Information窗口中清除。

经过一番更多的实验后,似乎版本号中的星号是罪魁祸首。如果我完全指定程序集版本,我的编辑和继续问题就会消失。而被引用的项目必须是一个VB.NET项目。我尝试了与C#项目相同的设置,并且我可以编辑并继续。

这似乎是一个非常有边缘的情况,我会向微软提交一个错误报告,但同时我也想知道编译器实际发生了什么 - 为什么它会得到两个不同的结果程序集的汇编版本在调试期间实际上不需要重新编译....如果您对发生的事情有很好的解释,请将其添加为答案。

编辑here's the bug report I filed

+0

显然,您的错误报告已被删除... :-( – Heinzi