在Visual Studio中进行单元测试时,不必要的项目会重建

Gor*_*ger 16 unit-testing build visual-studio-2013

我知道这个问题(和答案),但尽管尝试了所有建议的选项,我仍然卡住了.

我有一个包含多个项目的解决方案,但对于这个特殊情况,我想说我已经拥有了我ExampleProjectA的相应的单元测试项目ExampleProjectATest.第一个被添加为测试项目的参考 - 不是通过Visual Studio,"Project References"而是作为DLL的链接(类似"..\Path\$(Config)\ExampleProjectA.dll") - 这是由于我们公司建立服务器要求,但问题也存在于我们仍然存在"Project References".

  • 构建然后运行单个单元测试工作正常
  • 只更改单元测试中的单个字母,然后让测试运行总是导致重建ExampleProjectA,即使这不是必需的
  • 将所有(只有少数)文件ExampleProjectA从"Copy always"设置为"copy if newer"在各自的属性中没有帮助
  • 选中Tools => Options => Projects and Solutions => Build an Run(见下文)下的复选框也没有改变任何内容Visual Studio 2013设置

要查看是否有更多可用信息,我将构建输出设置更改为诊断.每次ExampleProjectA触发重建时,输出窗口中的第一行都是

1>项目'ExampleProjectATest'不是最新的.在输出文件'C:\ tfs\mysolution-dev\exampleprojectatest\bin\Release\exampleprojectatest.pdb'之后修改输入文件'c:\ tfs\mysolution-dev\exampleprojectatest\myfolder \namegeneratortest.cs'.

写入窗口的类名(例如namegeneratortest.cs)根据我更改的测试文件而改变.

不确定为什么会出现此消息,但下一步是禁用调试信息,如下所示Project properties => Build => Advanced => Output => Debug Info => None:

高级构建设置

仍然相同,没有任何改变.

我尝试的另一件事是检查我的解决方案文件夹中包含的文件的时间戳(因为有一个用户有一个带有未来时间戳的文件的情况 - 请参阅链接的帖子) - 无济于事.

我尝试的最后一件事是将构建设置更改Configuration Manager为不同的目标平台 - 某些设置不允许我成功构建解决方案,其他一些设置也是如此,但描述的问题仍然存在,因此没有变化.

Visual Studio Test Runner和ReSharper提供的行为类似(虽然不一样).

Visual Studio测试运行器

项目'ExampleProject'不是最新的.在输出文件'C:\ tfs\mysolution-dev\exampleprojecta\bin\exampleprojecta.pdb'之后修改输入文件'C:\ tfs\mysolution-dev\exampleprojecta\Views\Shared\someview.cshtml'.

ReSharper测试跑步者

项目'ExampleProjectATest'不是最新的.在输出文件'C:\ tfs\mysolution-dev\exampleprojectatest\bin\Release\exampleprojectatest.pdb'之后修改输入文件'c:\ tfs\mysolution-dev\exampleprojectatest\myfolder \namegeneratortest.cs'.

我正在使用带有ReSharper 8.2的Visual Studio 2013 Premium Edition和最新更新,我们的解决方案文件中的项目都在C#中.

更新

为了澄清 - 输出窗口中的第一行确实显示了必须重建测试项目 - 这很好.但是,以下行表明还ExampleProjectA必须重建,这不是必需的.输出窗口的后续消息还显示其他项目(ExampleProjectA必须重建引用).

更新2

尽管安装了Update 4,但没有任何改变.

Gor*_*ger 12

对于我的情况,解决方案是将配置文件的构建操作从"始终复制"更改为"如果更新则复制".需要一段时间才能找到,因为我必须更改构建输出详细信息以获取有关哪个文件导致错误的详细信息,例如

Project 'xyz' is not up to date. Project item 'c:\my\path\web.config.dev' has 'Copy to Output Directory' attribute set to 'Copy always'.

根据我的经验,也可能发生多次构建时显示不同的文件名,因此如果问题仍然存在,请确保您拥有正确的文件名和/或再次构建.

还要看看这个问题及其答案,以找到更多信息.

  • 我在Visual Studio 2013 Update 4上.这个答案减少了*一些不必要的项目重建,但似乎还有一些. (2认同)