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 包。
感谢您的帮助
这两个问题都与包的构建和解析方式有关。假设您有项目 A
和 B
以及 A
引用 B
。 A
引用了一个名为 A-Package
的包。 B
引用了一个名为 B-Package
.
的包
旧项目格式
在旧式项目(SDK 样式格式之前)中,构建后项目的输出将仅包含库和直接依赖项的内容。此处,A
的输出文件夹将包含来自 A
、B
和 A-Package
的文件,而 B
的输出文件夹将包含来自 [=11] 的文件=] 和 B-Package
。 packages.config
和 PackageReference
也会发生这种情况。
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
的输出文件夹将包含来自 A
、B
、A-Package
以及 B-Package
.
的文件
所以问题 1 中的问题很可能是使用了错误的框架,或者没有使用带有 PackageReference
.
的 SDK-Style 格式的结果
项目参考
第二个问题是项目引用未复制到您的包中。这就是找不到程序集的原因。目前不支持,但有 workarounds。 PrivateAssets
、IncludeAssets
和类似属性在这里无济于事。
我有一个项目 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 包。
感谢您的帮助
这两个问题都与包的构建和解析方式有关。假设您有项目 A
和 B
以及 A
引用 B
。 A
引用了一个名为 A-Package
的包。 B
引用了一个名为 B-Package
.
旧项目格式
在旧式项目(SDK 样式格式之前)中,构建后项目的输出将仅包含库和直接依赖项的内容。此处,A
的输出文件夹将包含来自 A
、B
和 A-Package
的文件,而 B
的输出文件夹将包含来自 [=11] 的文件=] 和 B-Package
。 packages.config
和 PackageReference
也会发生这种情况。
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
的输出文件夹将包含来自 A
、B
、A-Package
以及 B-Package
.
所以问题 1 中的问题很可能是使用了错误的框架,或者没有使用带有 PackageReference
.
项目参考
第二个问题是项目引用未复制到您的包中。这就是找不到程序集的原因。目前不支持,但有 workarounds。 PrivateAssets
、IncludeAssets
和类似属性在这里无济于事。