привет, я хочу создать многоцелевой пакет 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>
Верен ли этот библиотека\netcore?
Вы должны использовать тот же TFM в упаковке, что и ваш csproj
в элементе <TargetFramework>
. Если у вашего 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 по созданию пакетов с несколькими целями, просто используйте dotnet pack
для создания пакета, а NuGet определит, какие lib/*
папки использовать. Избегайте использования файлов nuspec. Любые другие метаданные, указанные вами в nuspec, могут иметь значение указан через свойства MSBuild в вашем csproj.