VS2017 代码更改不影响 .exe 文件

Posted

技术标签:

【中文标题】VS2017 代码更改不影响 .exe 文件【英文标题】:VS2017 code changes not affecting .exe file 【发布时间】:2019-09-16 07:05:15 【问题描述】:

所以我在面对 VS 代码更改时遇到了问题。

无论我对我的解决方案应用并构建了什么更改,它都运行良好,并且我可以在调试时看到这些更改正在应用。 但是相同的更改不适用于.exe 文件。

我也尝试过发布版本,与此相同。它可以很好地调试发布版本,但不会将这些更改应用到 .exe 文件。

【问题讨论】:

你用VS还是VScode?您当前的解决方案中有多少个项目?请尝试在调试和发布模式下重新构建解决方案,以检查是否有任何不同。 我使用的是 vs 2017 ......不是代码......有 4 个项目......我已经尝试在两种模式下构建......调试在这两种模式下都可以正常工作。 exe 文件也被修改(我的意思是文件夹视图中的日期和时间),但我没有看到应用程序中的任何更改 您需要向我们展示更多细节。例如,建立一个minimal reproducible example 对你和潜在的回答者都有帮助。 (例如,一个非常简单的控制台应用程序,只是为了演示)。此外,当您构建时,exe 将根据构建配置转到不同的文件夹(检查“调试”以及“发布”bin 文件夹)。此外,可能存在未重建的依赖项。在构建“main”(exe)应用程序时,尝试“Rebuild all”和“Clean”,这将强制重新构建 dll(引用的其他项目)。 另外,关于常量的编译可能有一些细节。例如:如果您在一个项目中更改了一个常量的值,并且它在另一个项目中使用,那么在更改后需要重新编译另一个项目。常量不被主项目“引用”,它们被乱七八糟地复制到其他项目中进行编译, 嗨,这个问题有什么更新吗?在调试之前,重新构建整个解决方案,并分享有关您的项目类型、编程语言和您所指的代码更改的更多详细信息。就像 Pac0 建议的那样,如果可能的话,最好提供一个最小的可重现示例 :) 【参考方案1】:

它可以很好地调试发布版本,但不会将这些更改应用于 .exe 文件。

调试项目时,VS debug engine will try to fetch the output project.exe and project.pdb for debugging。因此,如果调试运行良好(应用了这些更改),输出 project.exe 也应该没有任何问题(应用了更改)。

见此(对于 C++,与 C#、VB 类似的情况):

当VS调试引擎找不到输出.exe时出现此错误消息,这就是为什么我说如果在调试期间应用了更改,它实际上表明更改已应用于您的.exe文件。

让我将输出 .exe 的项目命名为 ProjectA,您的解决方案中的其他项目是 B、C、D。您可以查看以下两个方向:

如果您的意思是代码更改是在项目 A 中

    在解决方案资源管理器中右击项目A=>属性,检查Output Directory(C++) 或Output path in build tab(C#) 的值,它代表输出.exe 实际存在的位置,VS 调试引擎将获取此路径中的 .exe。

因此,请确保您测试的是此路径中的 .exe,而不是其他位置的旧版本。

如果您的意思是代码更改是在 B、C、D 中,而 A 取决于 B、C、D:

    在大多数情况下,VS 会帮助将程序集从 B、C、D 复制到 A 的 bin 文件夹中,但我不确定您的环境是否有问题会破坏这一点。您应该确保 bin 文件夹中的所有程序集都更新

我认为这个问题来自您的项目而不是 IDE(创建一个新的简单项目以检查问题是否发生在其中)。您以哪种方式检查更改是否已应用?无论在调试期间检查还是检查.exe,请确保使用相同的方式。

更新:

根据 Sandesh 的说法,这个问题可以通过 clean(clean 旧版本完全)重建。

【讨论】:

很高兴知道它会有所帮助:) 如果我的回答有助于解决此问题,您可以考虑将其标记为答案,请参阅it。此外,您可以分享您的详细信息并将其添加为自我回答,请参阅this。只是一个提醒:)【参考方案2】:

右键单击您的项目并单击属性,在常规页面中,将“启用托管增量构建”设置为“是”。它会在每次构建后替换旧的 exe 文件。

【讨论】:

以上是关于VS2017 代码更改不影响 .exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

VS2017创建控制台应用后,编写完代码调试正常,使用exe文件直接执行出现闪退情况解决方法。

VS2017 生成的exe无法在其他电脑上运行

VS2017中无法提示Unity代码问题

VS生成解决方案报错: "LC.EXE 已退出,代码为-1"

VS - 如何更改代码完成弹出前景

vs2010下C# WinForm 解决方案里面生成的文件都是啥作用?干啥的?