让我们考虑一个场景,在该场景中,我们要公开两个.NET Standard项目并为其创建NuGet包:

图书馆解决方案

ClassLibrary1(CL1)

∟ClassLibrary2(CL2)

重要的是要提到CL1与CL2具有ProjectReference。

NuGet的文档指出,理想情况下,我们应该使用一个程序集生成一个包,因此我们为每个包创建一个NuGet包。

当我们需要在LibrarySolution的范围内确定CL1中需要哪个版本的CL2时,就会出现问题,因为我们有直接的项目参考。

我想到以下两种方法:


在解决方案中维护项目引用,这意味着我们需要将程序包版本存储在csproj文件中,提交版本更改等,以便版本约束和依赖性要求正确(我们目前在CI管道和当前版本中处理版本控制)版本存储在此处而不是代码中)。
将对CL2的依赖关系转换为PackageReference。这样,CL1将始终依赖于已发布的CL2版本。但是,这样做将意味着围绕发布和更新NuGet软件包(批准PR,合并,CI等)进行所有操作,这可能会非常耗时。


我认为选项1更好,但还是有点手动。是否有解决此问题的最佳方法?我宁愿不要使用包来引用位于相同解决方案内部的项目,因为这会导致不必要的间接访问。

最佳答案

首先,使用ProjectReference可以正确执行操作。同一解决方案中的两个项目甚至没有理由知道另一个软件包的存在。
现在,由于您在同一解决方案中拥有CL1和CL2,我想CL1需要CL2的最新版本。

考虑到前一个因素,您只需添加以下内容即可生成构建包:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
标签,MSBuild会将其更改为对包中最新版本的NuGet依赖项。

09-13 08:04