1

我有一个包含多个项目的解决方案,所有其他项目都需要其中一个

我的目录如下所示:

|-MyProduct.Web
| |-MyProduct.Web.Project1
| |-MyProduct.Web.Project2
| |-MyProduct.Web.Project3
| |-MyProduct.Web.sln
|
`-MyProduct.Api
| |-MyProduct.Api.Project1
| |-MyProduct.Api.Project2
| |-MyProduct.Api.sln
|
`-MyProduct.Admin
| |-MyProduct.Admin.Project1
| |-MyProduct.Admin.sln
|
`-MyProduct.Core
| |-MyProduct.Core.Project1
| |-MyProduct.Core.Project2
| |-MyProduct.Core.Project3
| |-MyProduct.Core.Project4
| |-MyProduct.Core.Project5
| |-MyProduct.Core.sln
|
|-MyProduct.sln
|

我为 MyProduct.Web、MyProduct.Api 等构建了 TeamCity。

我遇到的问题是所有 3 个都依赖于 MyProduct.Core 当解决方案签入源代码控制(git)时,TeamCity 构建项目,但显然它无法编译 MyProduct.Core 依赖项,因为它不是那里。每个构建都只有 MyProduct.Admin 的内容(例如)

我怎样才能让它与 Teamcity 一起工作?

nb - MyProduct.sln 是一个“整体”解决方案。每个域也有自己的解决方案(因为每个项目通常包含多个 csproj)

4

3 回答 3

2

您也可以在同一目录中拉入核心项目,先构建它,然后构建另一个项目。

在实践中:假设您有一个 VCS 根MyProduct.Core和另一个根MyProduct.Admin,将两个根附加到构建配置并编辑每个根的签出规则:第一个将其设置+.:=>MyProduct.Core为 ,第二个设置为+.:=>MyProduct.Admin. 结帐后,构建目录包含您在问题中显示的确切结构,当然减去主 sln 文件。现在添加一个用于构建核心的构建步骤,另一个用于管理。请注意,如果您需要访问 .git 功能来获取 SHA 等,则必须使用“代理结帐”。

也可以使用工件,但我个人更喜欢上面的方法,因为这样您就可以确定一切都已正确重建,而且它类似于我在自己的开发机器上所做的事情。

于 2013-06-26T12:14:30.677 回答
1

另一个要考虑的选项:构建核心并将其作为 NuGet 包在本地发布(TeamCity 可以充当NuGet 服务器)。在其他项目中,引用此 NuGet 组件。

我更建议将其用于内部库组件,而不是 Core 项目 - 假设 Core 可能需要频繁编辑。在这种情况下,请选择 Paul 的答案:Artifact Dependencies。

于 2013-06-26T21:42:04.437 回答
0

您可以使用工件依赖项

一个构建的工件 (.dll) 用于另一个构建。

或者,如果您使用 Git,请使用子模块。

于 2013-06-26T12:32:08.527 回答