相互依赖时将项目作为NuGet软件包运输

时间:2019-06-15 21:26:00

标签: .net-core nuget

我正在建立三个项目

  • FooBar.Abstractions
  • FooBar.AspNetCore
  • FooBar.AspNetCore.IntegrationTesting

FooBar.AspNetCoreFooBar.AspNetCore.IntegrationTesting项目都引用了FooBar.Abstractions。我想将所有这三个包装和发货作为单独的NuGet包装。

我从本地的NuGet.config文件开始:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
      <add key="aspnetcore_abstractions" value="./src/FooBar.Abstractions/bin/Debug/" />
  </packageSources>
</configuration>

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

  <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的Abstractions软件包。

您如何使用NuGet的最新版本的NuGet包装来处理此问题?如何约束FooBar.AspNetCore在软件包参考和其他将安装的NuGet软件包之间使用相同的FooBar.Abstractions.dll版本?如果我将PackageReference Include="FooBar.Abstractions" Version="2.2"添加为项目参考,可以强制执行吗?

1 个答案:

答案 0 :(得分:1)

当您在项目引用中打包项目时,NuGet会将项目引用转换为NuGet依赖项。它根据打包后项目的版本来确定依赖项版本。打包时无需使用PackageReference。正如您发现/解释的那样,这样做会使本地开发变得更加困难。

因此,解决问题的方法是仅在项目位于同一源代码存储库中时使用ProjectReference