Nuget包依赖问题

Nuget package dependencies issue

我有一个项目 Customer.Invoices,它是一个 nuget 包,csproj 文件包含以下内容。 PackageReference Customer.Prices 是 Customer.Invoices 项目中引用的 nuget 包。

Customer.Groups 项目引用只是 Customer.Invoices 解决方案中的一个引用项目。

<ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.4" />
    <PackageReference Include="Customer.Prices" Version="1.0.0.14" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\CustomerGroups\CustomerGroups.csproj" />
  </ItemGroup>

我现在正在使用 Customer.Invoices nuget 包,这是我在另一个 C# 项目中需要的主要包。我 运行 有两个问题:

1.) 如果我不添加 Customer.Prices nuget 包,它会说当 运行 Customer.Invoices 项目中的一个方法时找不到程序集。

2.) 我找不到 CustomerGroups 项目的程序集。

我如何解决这些问题,因为我知道有包含资产等,但不确定如何处理依赖项。对于不确定这是否可行的第二个问题,将 privateassets=all 添加到项目参考中,因为这是一个 .Net Core 2.2 项目:

<ProjectReference PrivateAssets="all" Include="..\CustomerGroups\CustomerGroups.csproj" />

再次不确定这是正确的,因为我还不太了解资产,但还需要弄清楚我是否可以让 Customer.Prices 程序集工作而不必添加该 nuget 包。

感谢您的帮助

这两个问题都与包的构建和解析方式有关。假设您有项目 AB 以及 A 引用 BA 引用了一个名为 A-Package 的包。 B 引用了一个名为 B-Package.

的包

旧项目格式

在旧式项目(SDK 样式格式之前)中,构建后项目的输出将仅包含库和直接依赖项的内容。此处,A 的输出文件夹将包含来自 ABA-Package 的文件,而 B 的输出文件夹将包含来自 [=11] 的文件=] 和 B-Packagepackages.configPackageReference 也会发生这种情况。

SDK 项目格式

SDK project format with PackageReference (which is the default for .NET Core) supports transitive dependencies. This is described in detail here。这意味着如果 A 引用 B 并且 B 引用包 B-Package,那么 A 也将获得 B-Package 的内容。对于上面的示例,A 的输出文件夹将包含来自 ABA-Package 以及 B-Package.

的文件

所以问题 1 中的问题很可能是使用了错误的框架,或者没有使用带有 PackageReference.

的 SDK-Style 格式的结果

项目参考

第二个问题是项目引用未复制到您的包中。这就是找不到程序集的原因。目前不支持,但有 workaroundsPrivateAssetsIncludeAssets 和类似属性在这里无济于事。