packageReference或ProjectReference to to Componference在同一解决方案



让我们考虑一下我们有两个.NET标准项目的情况,我们要公开并创建Nuget软件包:

LibrarySolution

classLibrary1(cl1(

classLibrary2(cl2(

重要的是要提及CL1对Cl2具有项目重新。

nuget的文档指出,理想情况下,我们应该使用一个单个组件生成一个软件包,因此我们为每个组件创建一个nuget软件包。

当我们需要在CL1中需要哪个版本的Cl2版本的范围中确定cl1中的哪个版本,因为我们有直接的项目参考。

我想到了以下两种方法:

  1. 在解决方案中维护项目参考,这意味着我们需要将软件包版本存储在CSPROJ文件中,提交版本bumps等,以使版本的约束和依赖关系要求正确(我们当前处理版本,在CI管道中,当前版本存储在那里,而不是代码(。

  2. 将对Cl2的依赖性转换为packageReference。这样,CL1将始终对已经发布的CL2版本具有依赖性。但是,这样做将意味着围绕发布和更新Nuget软件包(批准PR,合并,CI等(进行所有舞蹈,这可能非常耗时。

我认为选项1更好,但仍然感觉有些手动。有没有解决此问题的最佳方法?我希望不使用软件包来引用与感觉不必要的间接方案中相同解决方案的项目。

首先,您使用ProjectReference正确地做事。没有理由在同一解决方案中有两个项目甚至意识到另一个包装的存在。现在,由于您在同一解决方案中具有CL1和CL2,因此我想CL1需要CL2的最新版本。

考虑到以前的考虑,您可以通过添加来生成构建包 <GeneratePackageOnBuild>true</GeneratePackageOnBuild>标签,MSBuild将其更改为nuget依赖性,以适用于软件包中的最新版本。

根据我的经验,使用PackageReference的最清洁,最少的方法是#2。是的,还有更多的开销,但它使一切都明确,这是正式支持的解决方案。

(如果您对此路线不犹豫,因为您需要每次更改CL2时都需要更新CL1,也许您需要考虑您的组件是否有意义。理想情况下,CL2应该定义相对稳定的接口,并且可以独立于CL1进行更改。(

否则,您尚未提及两种方法:

  1. 在一个Nuget软件包中包括两个DLL。虽然这没有正式支持现有工具,但此处描述了几个方法:https://github.com/nuget/home/home/issues/3891

  2. 将两个项目合并到一个库中,因为它们似乎像我上面提到的那样紧密地耦合。

相关内容

最新更新