每次从调试切换到发布时,Visual Studio 2012 C# 项目似乎都会强制重建,反之亦然,即使项目中没有任何更改。对于独立项目来说,这种情况不会发生——但是,如果您将单个项目引用添加到类库,那么每次更改为不同的构建配置时,它就会开始表现出这种行为。我已经追踪到了force.build
文件(在obj\Debug
or obj\Release
) 每当配置选择发生变化时。为什么是这样?可以禁用吗?我认为切换配置本身不应该需要重建。我在任何文档中都找不到任何提及“force.build”文件和/或如何禁用此“功能”的内容。
要重现该问题:
- Click
File
/New Project...
- 创建一个新的
Visual C#
-> Console Application
。保留生成的代码不变。
- 右键单击解决方案资源管理器中的新解决方案,然后选择
Add
-> New Project...
- Choose
Visual C#
-> Class Library
。保留生成的代码不变。
- 右键单击
ConsoleApplication1
在解决方案资源管理器中并选择Add Reference...
- 选中旁边的框
ClassLibrary1
in Solution
-> Projects
并击中OK
.
- 构建项目于
Debug
配置。它按照预期构建。
- 切换到
Release
配置并再次构建。它按照预期构建。
- 切换回
Debug
并再次构建。它builds,而且不应该。已经建好了,对吧?我们所做的只是更改目标配置选择。
这是一个错误吗?有解决方法吗?
我承认我从来没有太关注它,但我只是出于好奇而尝试(Visual Studio 2012 Update 4)。
对于像您描述的单个项目,我尝试切换配置,显然,当我更改配置时,主项目再次构建:
========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
但是,如果我查看输出文件夹,没有文件被更新(每个文件的更改时间与之前的版本相同),除了 vshost.exe(我禁用了它,但收到了相同的消息)。然后,我尝试将构建日志设置为更详细(工具 - 选项项目和解决方案 - 构建和运行 - MSBuild 项目构建输出详细程度 - 从“最小”更改为“正常”或“详细”):
然后我得到以下输出:
1>------ Build started: Project: ConsoleApplication1, Configuration: Release Any CPU ------
1>Build started 06/10/2015 00:26:50.
1>GenerateTargetFrameworkMonikerAttribute:
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
1>CoreCompile:
1>Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
1>_CopyAppConfigFile:
1>Skipping target "_CopyAppConfigFile" because all output files are up-to-date with respect to the input files.
1>CopyFilesToOutputDirectory:
1> ConsoleApplication1 -> c:\users\user\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Release\ConsoleApplication1.exe
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.09
========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
所以看来该项目并没有每次都真正得到重建。如果您发现所有内容都被重建(检查输出目录文件的更改时间),那么尝试按照我的描述增加构建日志的详细程度,看看发生了什么。希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)