我有一个包含多个项目的解决方案,这些项目都要共享给我的组织使用作为通用Nuget软件包。这个解决方案被一个git仓库包含,我们使用TeamCity运行构建,但我们并不是非常先进,我们需要手动启动Teamcity构建,以便在解决方案中的给定项目生成/发布新的Nuget软件包,每个项目都有自己的TeamCity构建配置。
构建后,项目通过标签
项目A(v1.0.6)依赖于项目B(v1.0.1)。假设我同时更改了项目A(v1.0.7)和项目B(v1.0.2)。由于项目B尚未构建完成,因此我不能让项目A引用项目B的NuGet软件包,所以我使用了项目引用。但是,这会导致Package A(v1.0.7)的NuGet软件包认为它具有与项目B(v1.0.2)相同的构建编号,实际上并非如此。因此,当有人使用项目A时,他们会被告知要查找不存在的依赖项项目B的版本(例如v1.0.7)。为解决此问题,在项目A的
那么,在生成没有nuspec的NuGet软件包时,如何智能处理项目引用?我希望尽可能少的手动干预。
我唯一的其他解决方案是使用Nuget软件包引用,但这意味着在开发人员可以开始处理项目A之前,必须先构建和部署项目B。
构建后,项目通过标签
.csproj <project/>
生成Nuget软件包:GeneratePackageOnBuild
,我们还通过version
标签控制版本号,该标签是由TeamCity构建属性填充的。这很好用。我们遇到问题的地方是管理项目对它们自身的引用/依赖项。我似乎无法正确理解如何做到这一点。例如:-- Solution
----- Project A v1.0.6
----- Project B v1.0.1
项目A(v1.0.6)依赖于项目B(v1.0.1)。假设我同时更改了项目A(v1.0.7)和项目B(v1.0.2)。由于项目B尚未构建完成,因此我不能让项目A引用项目B的NuGet软件包,所以我使用了项目引用。但是,这会导致Package A(v1.0.7)的NuGet软件包认为它具有与项目B(v1.0.2)相同的构建编号,实际上并非如此。因此,当有人使用项目A时,他们会被告知要查找不存在的依赖项项目B的版本(例如v1.0.7)。为解决此问题,在项目A的
.csproj
中添加了以下内容:
<ProjectReference Include =“..\ Company.ProjectB \ Company.ProjectB.csproj” ExcludeAssets =“All” />
然而,现在消费者不知道项目B的依赖关系(因为它不再出现在Nuget软件包依赖项中),并且当他们发现需要它时,他们将在使用项目A时收到运行时错误,表明它仍在寻找项目B v1.0.7,而此版本显然不存在。那么,在生成没有nuspec的NuGet软件包时,如何智能处理项目引用?我希望尽可能少的手动干预。
我唯一的其他解决方案是使用Nuget软件包引用,但这意味着在开发人员可以开始处理项目A之前,必须先构建和部署项目B。