如何让构建代理构建具有外部项目引用的解决方案?

时间:2013-07-17 19:35:48

标签: tfs msbuild

目前,我遇到了两个TFS构建问题:

问题一:我有一个项目的解决方案现在引用另一个解决方案中另一个项目的DLL产品。构建代理似乎不包含这些dll,并且构建失败。

问题二:我有一个在另一个解决方案中引用项目的解决方案。构建代理似乎不包含外部引用的项目,并且构建失败。

我查看了“复制目录”构建活动,但不知道在哪里填充或者放置什么作为源和输出值。

2 个答案:

答案 0 :(得分:2)

最佳做法是使用项目引用来引用同一解决方案中的其他项目。对于解决方案外部的引用,您应该使用文件引用,然后检入正在引用的已编译DLL。

Solution1
  \Project1  --> Project1.dll
  \Project2  --> Project2.dll

Solution2
  \ProjectA (references Project1.dll)
  \ProjectB (references Project2.dll)
  \References
      \Project1.dll -- this DLL gets checked in here and ProjectA references from here
      \Project2.dll -- this DLL gets checked in here and ProjectB references from here

ProjectA.csproj

<Reference Include="Project1.dll, Version=blah blah blah">
   <HintPath>..\References\Project1.dll</HintPath>
</Reference>

ProjectB.csproj

<Reference Include="Project2.dll, Version=blah blah blah">
   <HintPath>..\References\Project2.dll</HintPath>
</Reference>

使用这种方法,您必须构建Solution1,获取被删除的DLL,然后将它们检入Solution2的References文件夹中。您可以在Solution1的构建中获得真正的想象并设置一些逻辑,它自动检出Solution2 \ References文件夹,用构建中的最新版本替换Project1和Project2 DLL,然后检查它们......如果你是使用持续集成,这将启动Solution2的构建。

答案 1 :(得分:0)

如果您使用的是TFS 2012 / TFS2010构建模板,请确保将“特定于解决方案的构建输出”属性设置为false。这将确保构建代理在同一个bin目录中构建所有程序集。