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.config
从 csproj
复制的示例中,您可以看到包中包含一个 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.
上最受欢迎且仍在维护的软件包
我正在努力将 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.config
从 csproj
复制的示例中,您可以看到包中包含一个 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.
上最受欢迎且仍在维护的软件包