.net core 在相互依赖的情况下,将项目作为NuGet包交付

.net core 在相互依赖的情况下,将项目作为NuGet包交付,.net-core,nuget,.net Core,Nuget,我有三个项目正在建设中 FooBar.抽象 FooBar.AspNetCore FooBar.AspNetCore.IntegrationTesting FooBar.AspNetCore和FooBar.AspNetCore.IntegrationTesting项目都引用了FooBar.Abstractions。我想把这三个单独的NuGet包打包并发货 我从一个NuGet.config文件开始,该文件在本地看起来如下: 然后我将包添加到我的项目中 <ItemGroup>

我有三个项目正在建设中

  • FooBar.抽象
  • FooBar.AspNetCore
  • FooBar.AspNetCore.IntegrationTesting
FooBar.AspNetCore
FooBar.AspNetCore.IntegrationTesting
项目都引用了
FooBar.Abstractions
。我想把这三个单独的NuGet包打包并发货

我从一个
NuGet.config
文件开始,该文件在本地看起来如下:


然后我将包添加到我的项目中

  <ItemGroup>
    <PackageReference Include="FooBar.Abstractions" Version="2.0.0-preview1" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
  </ItemGroup>

这真的很糟糕,因为每次我在
FooBar.Abstractions
项目中进行更改时,我都必须进入我的C:\.nuget\packages文件夹并删除缓存,然后我的
FooBar.AspNetCore
项目才能从我的解决方案还原新编译的版本

如果我只是添加
FooBar.Abstractions
作为项目参考,然后将这两个包发送到NuGet.org,这会对在解决方案中跨不同项目安装这两个包的用户产生什么影响。NuGet和.Net知道它们是同一个引用程序集,就把它们都解决了吗?我假设在本例中,如果我将
FooBar.AspNetCore
项目添加为项目引用,则该项目将附带
FooBar.Abstractions.dll

我不知道这是否会导致冲突,因为知道包附带了.dll,然后客户会显式安装包含相同.dll的抽象包


您如何使用最新版本的NuGet打包来处理这个问题?如何约束
FooBar.AspNetCore
在包引用和其他人将安装的NuGet包之间使用相同的
FooBar.Abstractions.dll
版本?我不能强制打包引用Include=“FooBar.Abstractions”Version=“2.2”如果我将其添加为项目引用,可以吗?

当使用at项目引用打包项目时,NuGet会将项目引用转换为NuGet依赖项。它根据项目打包后的版本计算出依赖版本。打包时无需使用
PackageReference
。正如你发现/解释的那样,这样做会使地方发展更加困难

因此,问题的解决方案是,当项目位于同一源代码存储库中时,只需使用
ProjectReference