【问题标题】:TFS build - "content" build type files not present in a unit test's \out folder?TFS 构建 - 单元测试的 \out 文件夹中不存在“内容”构建类型文件?
【发布时间】:2015-09-05 14:39:37
【问题描述】:

我有一个包含单元测试项目和各种其他项目(单元测试引用)的解决方案。其中一个项目引用了一个程序集,该程序集又依赖于本机互操作 DLL,我已通过“内容”和“始终复制”的构建操作将其添加到项目中。

我可以在我的 PC 上构建和运行单元测试,但在 TFS (2012) 构建期间它们会失败。在服务器的\build\...\bin\ 文件夹中可以看到互操作DLL,但它不在\build\...\tst\[test_name]\Out\ 文件夹中。

我假设 TFS 试图通过复制它认为单元测试的依赖项来变得聪明?我已经尝试将互操作 DLL 添加到单元测试项目中(以与上述相同的方式),但这没有任何区别。我还尝试将 [DeploymentItem] 属性添加到其中一个单元测试(以复制互操作 DLL),但它似乎不起作用。

【问题讨论】:

  • 当您使用非默认文件夹结构时,您可能必须使用预测试或构建后的 PowerShell 来根据您的需要重新排列位。

标签: tfs msbuild


【解决方案1】:

我终于弄明白了,虽然不是很明显。默认情况下,TFS 构建会创建三个子文件夹:- \bin、\src 和 \tst。后者是测试项目及其依赖项被复制的位置(到 \Out 子文件夹),但我的互操作 DLL 不会被复制,因为它不是托管项目依赖项。 这在我的开发 PC 上不是问题 - 当构建单元测试项目时,Visual Studio 支持互操作 DLL 的“始终复制”选项(即使它位于不同的项目中),确保它被复制到单元测试项目的 \bin 文件夹。

我尝试了 [DeploymentItem] 属性,但运气不佳 - 有一些关于路径相对于何处的相互冲突的文章,而且您似乎还必须为此提供一个 .testsettings 文件工作。在花了 长时间 时间签入和测试各种排列之后,我从未在这方面取得任何成功。

我还尝试使用 .testsettings 文件(“部署”选项卡)部署文件。更复杂的是,我的互操作 DLL 必须位于 \bin 文件夹下的子文件夹中(如果有人感兴趣,它是 SQLite.Interop.dll)。 .testsettings 部署选项卡似乎不支持文件夹结构,因此互操作 DLL 将被复制到 \tst\Out 文件夹中,而不是所需的子文件夹中。

最后,我能够将构建配置为从 TFS 服务器的 \bin 文件夹运行单元测试,因此它的工作方式与开发 PC 类似:-

  1. 创建一个 .testsettings 文件并将其添加到解决方案中。在属性对话框的“部署”选项卡中,我勾选了“启用部署”复选框。我没有在此选项卡上指定任何文件。

  2. 将文件签入 TFS,然后编辑我的构建定义并相应地设置 Process -> Automated Tests -> Test Assembly -> Run Settings File。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多