另一个包含一个构建的输出

时间:2009-07-20 13:13:04

标签: .net version-control tfs tfsbuild

在另一个构建中将一个构建的输出包含为二进制文件的正确方法是什么?

假设我有一个名为CompanyName.Domain(我的域层)的解决方案。我把它设置为构建,并且每晚构建。

现在我想添加一个名为SomeProject.Web的解决方案。我想在我的解决方案中将CompanyName.Domin中的二进制文件包含在对等级别的Binaries文件夹中。然后项目SomeProjects.Web对Binaries \ CompanyName.Domain.dll的引用将起作用。

这样做的最佳做法是什么?我知道有人说他们试图通过分支来做到这一点。我是一个完全“源控制”的新手。但有些事情听起来不对。

4 个答案:

答案 0 :(得分:2)

就像Daryl一样,我们使用“Binaries”文件夹来引用二进制文件。我们的“库”只是将结果xcopy构建到二进制文件位置,所以如果我们希望更新库,我们只需检查二进制文件,构建并再次检查它们。

这允许我们从一个标准化的位置共享我们所有的内部库(以及我们使用的任何第三方库),并且我们所有的库都可以预先构建,从而节省了我们的开发人员必须构建它们,如果它们实际上没有改变libs中的任何内容。

注意只引用库的Release版本(我们唯一的例外是我们有一个调试助手库,它们有条件地编译成调试版本,我们必须引用它的调试版本,否则所有即使在调试版本中,我们的调试也会从程序中编译出来!)

最后一点:除非没有合理的选择,否则应避免分支。

答案 1 :(得分:0)

我公司通过创建“References”文件夹来保存构建外部引用程序集所需的所有.dll文件,因为bin文件夹实际上并未在源代码管理下保存。

答案 2 :(得分:0)

我们使用TFS Dependency Replicator,它可以在项目构建后将文件复制到TFS中的任何项目。它没有真正伟大的文档,但它似乎做了你应该设置它后应该做的事情。

博文Implementing Dependency Replication with TFS Team Build建议设置一个分支方案,以帮助跟踪哪些项目正在使用哪些依赖项,这对我来说也是有意义的。

答案 3 :(得分:0)

我的流程类似于其他海报。

假设我有两个项目,称之为CoreProject和AppProject。 CoreProject是共享的。 AppProject有一个名为SharedBinaries的文件夹。这是所有程序集引用所指向的位置。

我的CoreProject的TFSBuild脚本配置为执行以下操作:

- 获取最新

-Build Drop to drop zone(类似\\ SERVER \ DropZone \ CoreProjectBuildNameAndNumber)

-Drop被复制到放置区中的文件夹(类似于\\ SERVER \ DropZone \ Latest \ CoreProject)

AppProject的TFSBuild脚本配置为执行以下操作:

- 获取最新

- 检出SharedBinaries文件夹中的文件

从\\ SERVER \ DropZone \ Latest \ CoreProject

复制文件

-build

-Drop to drop zone(类似\\ SERVER \ DropZone \ AppProjectBuildNameAndNumber)

- 如果构建成功,则构建将复制到文件夹放置区域(类似于\\ SERVER \ DropZone \ Latest \ AppProject),并且在SharedBinaries中检入文件

- 如果构建失败,则复制到SharedBinaries的文件会将结帐撤消。

我发现这个效果非常好。 AppProject始终使用CoreProject中的最新位进行构建,因此我们可以立即知道是否存在重大变化。通过将SharedBinaries签入TFS,我可以获得特定版本,并使用当时使用的CoreProject中的相同dll运行代码。此外,我必须得到最新的,我的本地机器也在使用最新的位。