在另一个项目中引用二进制文件

问题描述:

新手问题:我在TeamCity中有2个C#项目,称它们为A和B.A包含对B.dll的引用。 B建立良好。但是,A无法建立,因为它找不到B:找不到组件“B”在另一个项目中引用二进制文件

看起来很简单:如何告诉我的项目A在buildserver上从哪里找到B \ bin \ Release中的二进制文件?

您遇到的问题是Teamcity会在其自己的临时目录中运行每个构建,并且由于这是一个随机生成的名称,因此无法直接从一个参数设置参考。

通常,您会编写一个构建脚本,以正确的顺序构建A和B,并且只需要Teamcity即可运行构建脚本。 (既然你使用C#,MSBuild对此非常理想)。

另一种方法是将B.dll复制到已知位置(例如c:\currentbuild)并在其构建结束时将A从此处始终引用。您可以在Teamcity中设置构建依赖关系,以便在重建B时重建A。

+0

感谢您的回答,我可以看到服务器上的临时目录,并且可以通过添加快照依赖关系来创建构建链。如果我可以告诉快照将B中的二进制文件复制到目录A所期望的目录中,那么一切都会好的。有没有办法做到这一点?当然必须有? – Aidan 2010-06-04 09:19:27

+0

不,我不这么认为。这就是为什么你应该为TeamCity编写一个构建脚本来执行。 – Paolo 2010-06-04 17:45:29

您可以通过创建'Artifacts'和工件依赖关系来执行此操作。

如果项目A依赖于项目B,那么你使用像这样的假象路径创建项目B中的神器:

bin/Release/B.dll 

然后在项目中你设置与像路径B中的神器依赖性:

B.dll 

并将目标路径设置为项目A期望找到的地方B.dll eg

./Libs 

你可以做其他的很酷的东西像所有的文物自动归档到一个zip使用语法:

bin/Release/*.dll => B.zip 

,并通过访问它们:

B.zip!B.dll 

所有这些路径相对于构建目录而言,这使得它变得简单,并且不需要担心TeamCity GUID文件夹或使用绝对路径。

+0

伟大的技巧,谢谢 – 2012-01-16 14:04:43