嗨,我想创建多目标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 是否正确?
答案 0 :(得分:0)
netcore
is a Microsoft Store TFM。
对于您的.NET Core 3(netcoreapp3.0
)WPF应用,您需要在NuGet软件包中与netstandard
或netcoreapp
进行多目标。
例如:
<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。