【问题标题】:Nuget package dependencies issueNuget包依赖问题
【发布时间】:2020-06-26 21:12:13
【问题描述】:

我有一个项目 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 包。

感谢您的帮助

【问题讨论】:

  • 在“旧”的 .csproj 文件格式中,依赖项不是......传递性的? (我不知道正确的词),但它们是新格式。让我解释。如果您有 3 个项目,A、B 和 C。A 引用 B(但不是 C),而 B 引用 C。当您全部编译它们时,在旧样式中,A 的输出文件夹将包含 A 和 B,但是不是 C。在新格式中,默认情况下还会包含 C。你知道你是否有一个新样式的 .csproj 文件,或者一个新样式?你里面有一堆条目,每个 .cs 文件一个?
  • 嗨@LasseV.Karlsen 我修改了问题,也显示了csproj引用。这是一个 .Net Core 2.2 类库

标签: c# nuget teamcity artifactory


【解决方案1】:

这两个问题都与如何构建和解决包有关。假设您有项目 ABA 引用 BA 引用了一个名为 A-Package 的包。 B 引用了一个名为 B-Package 的包。

旧项目格式

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

SDK 项目格式

SDK project formatPackageReference(这是 .NET Core 的默认设置)支持传递依赖项。这在here 中有详细描述。这意味着如果A 引用BB 引用包B-Package,那么A 也将获得B-Package 的内容。如上例,A 的输出文件夹将包含来自ABA-PackageB-Package 的文件。

所以问题 1 中的问题很可能是由于使用了错误的框架,或者没有使用带有 PackageReference 的 SDK 样式格式。

项目参考

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

【讨论】:

  • 感谢感谢,我将对此更加熟悉。
  • csproj 文件只显示 所以不确定什么 Sdk 会确保所有依赖项都包含在瞬态。
  • "Microsoft.NET.Sdk" 及其变体是启用传递依赖关系的新 SDK 样式项目类型。你所有的项目都应该使用这种类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多