TFS构建 - "内容"构建类型文件不存在于单元测试的\ out文件夹中?

时间:2015-06-19 14:46:28

标签: tfs msbuild

我有一个包含单元测试项目和各种其他项目(单元测试参考)的解决方案。其中一个项目引用了一个程序集,而该程序集又依赖于本机互操作DLL,我已经使用" Content"和" Copy Always"的构建操作添加到项目中;

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

我认为TFS试图通过复制认为是单元测试的依赖关系而变得聪明?我已经尝试将互操作DLL添加到单元测试项目中(以与上面相同的方式),但它没有任何区别。我还尝试在其中一个单元测试中添加[DeploymentItem]属性(复制互操作DLL),但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:0)

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

我尝试了[DeploymentItem]属性,但没有太多运气 - 有一些有关路径相对的文章存在冲突,而且似乎你必须有一个.testsettings文件为此工作。花了时间登记并测试各种排列后,我从未取得任何成功。

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

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

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

  2. 检查文件到TFS,然后编辑我的构建定义并设置Process - >自动化测试 - >测试组件 - >相应地运行设置文件。