创建多目标nuget程序包

时间:2019-07-24 19:10:47

标签: nuget nuget-package nuget-spec

嗨,我想创建多目标nuget包。一切似乎都正常,除了我创建wpf NetCore3应用程序并安装我的软件包时。使用.NET Framework dll而不使用NetCore3库

<files>
    <file src="lib\netcore\Control.dll" target="lib\netcore" />
    <file src="lib\net48\Control.dll" target="lib\net48" />
    <file src="lib\net40\Control.dll" target="lib\net40" />
    <file src="lib\net40\Microsoft.Windows.Shell.dll" target="lib\net40" />
  </files>

lib \ netcore 是否正确?

2 个答案:

答案 0 :(得分:0)

netcore is a Microsoft Store TFM

对于您的.NET Core 3(netcoreapp3.0)WPF应用,您需要在NuGet软件包中与netstandardnetcoreapp进行多目标。

例如:

<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>

答案 1 :(得分:0)

您应在软件包中使用与csproj元素在<TargetFramework>中相同的TFM。如果您的csproj<TargetFramework>netcore</TargetFramework>,请确定使用lib/netcore/whatever.dll。但是,如果您的csproj<TargetFramework>netcoreapp3.0</TargetFramework>,则应该使用lib/netcoreapp3.0/whatever.dll

但是,SDK样式项目是唯一可与.NET Core 3.0一起使用的类型,支持多目标(将<TargetFramework>更改为<TargetFrameworks>,然后使用以分号分隔的列表netcoreapp3.0;net48;net40) ,NuGet的打包目标知道如何自动打包这些项目。因此,无需自己创建nuspec,这样可以最大程度地减少犯此类错误的风险。

因此,正如NuGet's docs on creating multi-targeting packages所说,只需使用dotnet pack创建您的程序包,然后让NuGet找出要使用的lib/*文件夹。避免使用nuspec文件。您在nuspec中指定的任何其他元数据都可以specified via MSBuild properties in your csproj