我正在努力将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。
答案 0 :(得分:0)
我只在NuGet团队工作了几个月,所以我不认为自己是NuGet的专家,但是我建议MarkdownDeep.NET-Signed
软件包可能编写不正确。
使用csproj
从packages.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上最受欢迎且仍保持不变的软件包。