TFS构建—“TFS”;内容“;单元测试中不存在生成类型文件';s\out文件夹?

TFS构建—“TFS”;内容“;单元测试中不存在生成类型文件';s\out文件夹?,tfs,msbuild,Tfs,Msbuild,我有一个包含单元测试项目和各种其他项目(单元测试引用的)的解决方案。其中一个项目引用了一个程序集,该程序集又依赖于一个本机互操作DLL,我使用“Content”和“Copy Always”的生成操作将其添加到项目中 我可以在我的电脑上很好地构建和运行单元测试,但在TFS(2012)构建过程中它们失败了。在中可以在服务器的\build\…\bin\文件夹中看到互操作DLL,但它不在\build\…\tst\[test\u name]\Out\文件夹中 我假设TFS试图通过复制它认为是单元测试的依赖

我有一个包含单元测试项目和各种其他项目(单元测试引用的)的解决方案。其中一个项目引用了一个程序集,该程序集又依赖于一个本机互操作DLL,我使用“Content”和“Copy Always”的生成操作将其添加到项目中

我可以在我的电脑上很好地构建和运行单元测试,但在TFS(2012)构建过程中它们失败了。在中可以在服务器的
\build\…\bin\
文件夹中看到互操作DLL,但它不在
\build\…\tst\[test\u name]\Out\
文件夹中


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

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

我尝试了
[DeploymentItem]
属性,但运气不太好-有一些关于路径相对位置的文章存在冲突,而且似乎您必须有一个.testsettings文件才能工作。在花了很长时间检查和测试各种排列之后,我在这方面从未取得任何成功

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

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

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

  • 将文件签入TFS,然后编辑我的构建定义并相应地设置流程->自动测试->测试程序集->运行设置文件


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

    我尝试了
    [DeploymentItem]
    属性,但运气不太好-有一些关于路径相对位置的文章存在冲突,而且似乎您必须有一个.testsettings文件才能工作。在花了很长时间检查和测试各种排列之后,我在这方面从未取得任何成功

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

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

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

  • 将文件签入TFS,然后编辑我的构建定义并相应地设置流程->自动测试->测试程序集->运行设置文件


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