我有一个当前使用.NET 4.0构建并部署到Nuget的库。该库没有很多依赖关系,并且似乎在.NET Standard和Core项目中也能正常工作。
将库手动添加到Standard或Core项目时,抛出兼容性错误。通过修改.csproj文件以删除不需要的引用来解决此问题。现在看起来像这样。
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
此解决方案似乎可以使库在Core和Standard上正常运行。将库手动添加到Standard或Core项目中时,兼容性警告现在消失了,即使该库仍是使用.NET 4.0构建的。但是,发布到Nuget,然后通过Nuget下载库后,我仍然收到此警告。
“警告****软件包'******'是使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETCoreApp,Version = v2.0'还原的。可能与您的项目不完全兼容。”
经过大量的烦恼和调查后,我意识到该库似乎仍然可以在Standard和Core项目中使用,但是我不确定它是否使用.NET 4.6.1来基于此警告实际运行该库。
所以我的问题是,如何正确地将程序包部署到Nuget以正确地针对多个运行时?我是否需要在每个运行时中构建多个项目?如果可以,我是否仍可以将其打包为一个软件包,还是每个运行时都需要一个不同的版本?不知道最佳实践是什么。
答案 0 :(得分:5)
最简单的方法是将csproj更改为使用新的SDK格式,然后使用<TargetFrameworks>
。例如,here's Dapper's project file为3个TFM构建-密钥为:
<TargetFrameworks>net451;netstandard1.3;netstandard2.0</TargetFrameworks>
通过Condition
属性结合一些决定,这些决定影响为每个TFM添加哪个程序包或程序集引用-您可以在nuget here的“ Dependencies”视图中查看这些条件的结果。当您dotnet pack -c Release
或在IDE中启用“生成时生成NuGet软件包”选项(“软件包”选项卡,项目属性)时,该软件包将在生成输出中为您生成.nupkg
。内部包含3个TFM。