NuGet PackageReference与当前框架版本不兼容

时间:2019-05-31 12:44:16

标签: .net nuget compatibility

我正在努力将NuGet引用从使用packages.json格式移至PackageReferences。我的NuGet软件包兼容性存在问题:软件包支持较旧版本的.NET Framework。

使用packages.json格式可以正常工作。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="MarkdownDeep.NET-Signed" version="1.5" targetFramework="net461" />
</packages>

<Reference Include="MarkdownDeep, Version=1.5.5082.29984, Culture=neutral, PublicKeyToken=65640b2d9fe5ac0e, processorArchitecture=MSIL">
  <HintPath>..\..\packages\MarkdownDeep.NET-Signed.1.5\lib\.NetFramework 3.5\MarkdownDeep.dll</HintPath>
  <Private>True</Private>
</Reference>

但是,用.csproj文件中的PackageReference指令替换它会导致以下错误:

<PackageReference Include="MarkdownDeep.NET-Signed">
  <Version>1.5</Version>
</PackageReference>
  

“ C:\ Source \ WebApp.csproj”(还原目标)(1)->(还原目标)->   C:\ Source \ WebApp.csproj:错误NU1202:程序包   MarkdownDeep.NET-Signed 1.5.0与net472不兼容   (.NETFramework,Version = v4.7.2)。软件包MarkdownDeep.NET-Signed 1.5.0   支持:netframework35(.NetFramework 3.5,Version = v0.0)

请注意,在两种情况下,当前的目标框架都是相同的,即v4.7.2。

是否有任何其他指令要添加到<PackageReference>节点,这将允许我指出可以将.NET Framework 3.5作为目标?

注意: Package references (PackageReference) in project files中有一些不错的信息,但似乎它仅将TargetFramework作为变量来有条件地添加引用。我不认为我需要处理多种.NET Framework版本-一路只是v4.7.2。

1 个答案:

答案 0 :(得分:0)

我只在NuGet团队工作了几个月,所以我不认为自己是NuGet的专家,但是我建议MarkdownDeep.NET-Signed软件包可能编写不正确。

使用csprojpackages.config复制的样本中,您可以看到该软件包包含一个lib\.NetFramework 3.5\文件夹。但是,NuGet软件包通常使用缩写形式lib\net35\。通过对创建控制台应用程序的快速测试,引用了NuGet.Frameworks程序包,然后使用NuGetFramework.Parse(".NetFramework 3.5"),结果对象具有“不受支持”的框架。 NuGet包资源管理器(在Microsoft Store中提供)是第三方应用程序,因此不能保证与VS中的NuGet一样工作,但是它还显示.NetFramework 3.5为“无法识别的框架”,这进一步证明了它的有效性。可能是编写错误的软件包。

鉴于该软件包似乎不正确,因此NuGet无法通过PackageReference恢复,因为NuGet负责从该软件包中选择与您的项目兼容的资产。我不知道为什么要在packages.config项目中安装软件包。

如果您只是在寻找.NET降价解析器,据我所知markdig是nuget.org上最受欢迎且仍保持不变的软件包。