Teamcity 从一个项目中引用另一个项目中的二进制文件

Teamcity 从一个项目中引用另一个项目中的二进制文件,teamcity,Teamcity,新手问题:我在TeamCity有两个C#项目,称它们为A和B。A包含对B.dll的引用。B很好。但是,A无法生成,因为它找不到B:找不到程序集“B” 这看起来很简单:我如何告诉buildserver上的项目A从B\bin\Release的哪里找到二进制文件?您遇到的问题是,Teamcity在其自己的临时目录中运行每个构建,并且由于这是一个随机生成的名称,您无法直接设置从一个到另一个的引用 通常,您会编写一个构建脚本,以正确的顺序构建a和B,然后让Teamcity运行该构建脚本。(因为您使用的是C

新手问题:我在TeamCity有两个C#项目,称它们为A和B。A包含对B.dll的引用。B很好。但是,A无法生成,因为它找不到B:找不到程序集“B”


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

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

通常,您会编写一个构建脚本,以正确的顺序构建a和B,然后让Teamcity运行该构建脚本。(因为您使用的是C#,所以MSBuild非常适合这种情况)

另一种方法是在B.dll的生成结束时将其复制到已知位置(例如,
c:\currentbuild
),并在此处始终引用它。您可以在Teamcity中设置生成依赖项,这样,如果B被重建,A也会被重建。

您可以通过创建和工件依赖项来实现这一点

如果项目A依赖于项目B,那么您可以使用如下所示的工件路径在项目B上创建工件:

bin/Release/B.dll
然后在项目A上,您在B上设置一个工件依赖项,路径如下:

B.dll
并将目标路径设置为项目A希望找到B.dll的位置,例如

./Libs
您可以使用以下语法执行其他很酷的操作,例如自动将所有工件归档到zip中:

bin/Release/*.dll => B.zip
并通过以下方式访问:

B.zip!B.dll

所有这些路径都是相对于生成目录的,因此非常简单,您无需担心TeamCity guid文件夹或使用绝对路径。

感谢您的回答,我可以看到服务器上的临时目录,并且我可以通过添加快照依赖项来创建生成链。如果我能告诉快照将二进制文件从B复制到A所期望的目录中,一切都会好起来。没有办法吗?肯定有?不,我想没有。这就是为什么您应该为TeamCity编写一个要执行的构建脚本。