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

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

我有一个包含多个项目的解决方案,但对于这个特殊情况,假设我有我的 ExampleProjectA和相应的单元测试项目 ExampleProjectATest .第一个添加为对测试项目的引用 - 不是通过 Visual Studio 的 "Project References"但是作为DLL的链接(类似于"..\Path\$(Config)\ExampleProjectA.dll")-这是由于我们公司构建服务器的要求,但是当我们还有"Project References"时,问题也存在。 .

  • 构建然后运行单个单元测试工作正常
  • 在单元测试中只更改一个字母然后让测试运行总是会导致重建 ExampleProjectA ,即使这不是必需的
  • ExampleProjectA 中设置所有(只有少数)文件在各自的属性中从“始终复制”到“如果更新则复制”没有帮助
  • 选中 Tools => Options => Projects and Solutions => Build an Run 下的复选框(见下文)也没有改变任何东西

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

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

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

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



    还是一样,什么都没变。

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

    我尝试的最后一件事是更改 Configuration Manager 中的build设置到不同的目标平台 - 有些设置不会让我成功构建解决方案,其他一些设置可以,但所描述的问题仍然存在,所以没有改变。

    行为与 Visual Studio Test Runner 和 ReSharper 提供的行为相似(尽管不一样)。

    Visual Studio 测试运行器

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

    ReSharper 测试运行器

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

    我使用的是带有 ReSharper 8.2 和最新更新的 Visual Studio 2013 高级版,我们的解决方案文件中的项目是 C#。

    更新

    澄清一下 - 输出窗口中的第一行确实显示必须重建测试项目 - 这很好。然而,以下几行也表明 ExampleProjectA必须重建,这不应该是必要的。输出窗口的后续消息还显示其他项目(从 ExampleProjectA 引用)必须重建。

    更新 2

    尽管安装了更新 4,但没有任何改变。

    最佳答案

    对于我的情况,解决方案是将配置文件的构建操作从“始终复制”更改为“如果更新则复制”。花了一段时间才找到,因为我必须更改构建输出详细信息以获取有关哪个文件导致错误的详细信息,例如
    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'.
    根据我的经验,多次构建时也可能会显示不同的文件名,因此请确保您拥有正确的文件名和/或如果问题仍然存在,请再次构建。

    也看看this question and its answers查找更多信息。

    https://stackoverflow.com/questions/23062116/

    相关文章:

    ios - 如何让 xcode 在依赖项之前运行脚本?

    c++ - 构建 Boost 动态可链接会导致链接错误?

    android - 使用 gradle 为不同的应用程序风格使用不同的资源

    android - 错误 "cannot find -lrt"为 Android 构建 Boost

    iphone - 在 Xcode 中将build设置重置为默认值?

    c++ - 如何让项目将其构建输出与 Scons 放在同一目录中?

    xcode - 使用运行脚本时更新 Xcode 构建进度条

    c# - TFS 构建测试结果

    visual-studio - 在构建期间无法自动将 NuGet 包更新到最新版本

    java - 如何使用命令行在 Linux 下使用 Java 构建 OpenCV?(将在 MapRe