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

NuGet PackageReference not compatible with current framework version

我正在努力将 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" (Restore target) (1) -> (Restore target) -> C:\Source\WebApp.csproj : error NU1202: Package MarkdownDeep.NET-Signed 1.5.0 is not compatible with net472 (.NETFramework,Version=v4.7.2). Package MarkdownDeep.NET-Signed 1.5.0 supports: 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。

我只在 NuGet 团队工作了几个月,所以我不认为自己是所有 NuGet 方面的专家,但我建议 MarkdownDeep.NET-Signed 包可能不会被创作正确。

从您使用 packages.configcsproj 复制的示例中,您可以看到包中包含一个 lib\.NetFramework 3.5\ 文件夹。但是,NuGet 包通常使用缩写 lib\net35\。通过创建控制台应用程序的快速测试,引用 NuGet.Frameworks 包然后使用 NuGetFramework.Parse(".NetFramework 3.5"),生成的对象具有 "unsupported" 框架。 NuGet Package Explorer(可在 Microsoft Store 中获得)是第 3 方应用程序,因此不能保证与 NuGet 在 VS 中的工作方式相同,但它还将 .NetFramework 3.5 显示为 "Unrecognized framework" 进一步证明它可能是一个错误创作的包。

鉴于包似乎不正确,NuGet 恢复失败 PackageReference 是有效的,因为 NuGet 负责从包中选择与您的项目兼容的资产。我不知道为什么在 packages.config 项目中安装这个包会起作用。

如果您只是在寻找 .NET markdown 解析器,据我所知 markdig 是 nuget.org.

上最受欢迎且仍在维护的软件包