Nuget库的多运行时目标

时间:2018-07-27 14:30:36

标签: c# .net .net-core nuget .net-standard

我有一个当前使用.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以正确地针对多个运行时?我是否需要在每个运行时中构建多个项目?如果可以,我是否仍可以将其打包为一个软件包,还是每个运行时都需要一个不同的版本?不知道最佳实践是什么。

1 个答案:

答案 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。