0

我正在尝试从 .NET Core 3.1 项目中引用,这是一个仅net40通过 NuGet 兼容性 shim 定位的 NuGet 包。该包已添加到我的项目中,但net40依赖项未添加。

包的结构如下:

lib\
  net40\
    AssemblyA.dll

nuspec: 
  <dependencies>
    <group targetFramework="net40">
      <dependency id="PackageB" version="1.0" />
    </group>
  </dependencies>

Visual Studio 的包管理器列出了依赖项,但是安装时,VS 的“预览更改”窗口没有列出依赖项,并且确实没有安装。PackageB还针对net40

如果我这样做,它确实有效:

  • 将依赖项包含在“任何”(空白)依赖组中以及下net40
  • 移除net40依赖组并将包直接列在<dependencies>平面列表下
  • 删除net40下面lib\并使用平面列表

这些并不理想,因为它混淆了目标框架的真实性质。最后两个产生NU5128pack。为了将来的参考,我应该提一下,即使是这些场景也需要从本地缓存中删除依赖项才能正常工作(肯定是一个错误?)。

关于如何从此类包中提取依赖项的任何想法?这根本不支持吗?一个很好的测试示例是“Polly.Net40Async”包。

(VS:16.6.5,dotnet:3.1.302,PackageReference,Windows 10)

4

1 回答 1

0

我正在尝试从 .NET Core 3.1 项目中引用,这是一个通过 NuGet 兼容性 shim 仅针对 net40 的 NuGet 包。该包已添加到我的项目中,但 net40 依赖项没有。

nuget 包仅针对net40这意味着该包用于net framework 4+.

默认情况下,Net Core 项目不能使用这种类型的 nuget,除非包和依赖项被列为支持Net CoreNet Standard

===========================================

此外,您可以注意到Polly.Net40Async nuget 包中的信息:

在此处输入图像描述

group targetFramework="net40"意味着如果您的项目目标框架版本是4+,它将安装列出的依赖项。

所以你不应该将这种类型的包安装到Net Core 3.1项目中。它是由作者设计的。

另外,如果将nuget包中libany的子文件夹更改为,可以将依赖项添加到Net Core项目中。

毕竟any意味着它针对任何框架版本net core—— net standard、、、net framework。而且您只需要删除依赖项的条件(对 的争用Net Framework 4+)。

=====================================

添加更多详细信息

更新 1

实际上,Net Core 项目可以安装一些仅针对 Net Framework 的 nuget 包。

在我这边,这个包可以安装在 Net Core 项目中。但是,有一条警告显示它可能与您的Net Core项目不完全兼容。虽然可以使用,但还是有一些特殊情况下没有遇到的问题。

对于依赖项,由于您的项目以Net Core而不是Net Framework为目标,因此依赖项不会与主包一起自动安装。但是您可以通过Nuget Package Manager UI手动单独安装这些依赖项。(搜索它们然后一一安装)。

如果满足条件group targetFramework="net40",它将自动安装这些依赖项以及主 nuget 包。但是由于您的项目以Net Core为目标,因此不会自动安装它们。

作为建议,您可以在Nuget 包管理器 UI上搜索这些依赖项,然后单独手动安装它们。

于 2020-08-03T03:33:12.530 回答