Nuget 与.NET标准相比,.NET5更喜欢.NETFramework吗?

Nuget 与.NET标准相比,.NET5更喜欢.NETFramework吗?,nuget,.net-standard,.net-5,Nuget,.net Standard,.net 5,我有一个Nuget包(我们称之为B),它引用了另一个Nuget包(我们称之为a)。包B的目标是.NET标准2.0。Nuget软件包A的目标是.NET Framework,.NET标准2.0和.NET标准2.1。当.NET5应用程序使用B时(我们称之为C)。。。它始终选择A的.NET Framework版本。这会产生NU1701警告:已使用“.NETFramework,版本=v4.6.1、.NETFramework,版本=v4.6.2、.NETFramework,版本=v4.7、.NETFrame

我有一个Nuget包(我们称之为B),它引用了另一个Nuget包(我们称之为a)。包B的目标是.NET标准2.0。Nuget软件包A的目标是
.NET Framework
.NET标准2.0
.NET标准2.1
。当.NET5应用程序使用B时(我们称之为C)。。。它始终选择A的.NET Framework版本。这会产生
NU1701警告:已使用“.NETFramework,版本=v4.6.1、.NETFramework,版本=v4.6.2、.NETFramework,版本=v4.7、.NETFramework,版本=v4.7.1、.NETFramework,版本=v4.7.2、.NETFramework,版本=v4.8”而不是项目目标框架“net5.0”进行还原。此软件包可能与您的项目不完全兼容。

那么,为什么.NET5会选择.NETFramework版本而不是.NET标准版本呢?这一定是个bug?它必须看到那里的其他程序集,并意识到这不是一个警告

我知道我可以在应用程序C中通过使用HintPath来精确定位a程序集的
lib
位置,从而强制做出明智的选择。我可以在包B中强制正确的行为吗

C项目文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <Platforms>anycpu</Platforms>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="B" Version="1.0.0.1" />
  </ItemGroup>
</Project>

Exe
net5.0
任意CPU
B NuSpec文件具有:

      <dependency id="A" version="2.2.1" />

这是我的NuGet包存储库,用于。。。每个文件夹中都有一个程序集。我希望.NET标准2.0避免警告


当应用程序“C”的目标是
.NET标准2.0
(或
.NET标准2.1
)时,为“A”和“B”选择的包目标是什么?C是针对.NET 5的应用程序。B是一个面向.NET标准2.0的类库。B依赖于A。A是一个类库,目标是.NET Framework或.NET Standard 2.0或.NET Standard 2.1(所有三个都在lib目录中)。将B和A作为nuget引用直接添加到C中,然后看看会发生什么。是,也许会,除了我发布的是B而不是A。我认为不发布或者必须向用户指定这一点会更好。我知道我可以在B包中分发A程序集。这是我所知道的唯一可行的方法。net5首选其他netcoreapp TFM,然后是netstandard,最后是netfx(如果项目设置了AssetTargetFallback)。您的场景选择netfx资产这一事实意味着与您在问题中描述的情况不同的事情正在发生。A是我唯一能帮助弄清楚到底发生了什么的方法。NuGet独立地选择每个包的资产,因此在选择A的资产时,B的TFM并不重要