Во-первых, убедитесь, что вы используете проекты на основе SDK, чтобы обеспечить правильное усечение зависимостей для целевых сред, таких как netstandard*
(вместо использования файла .nuspec).
Цель состоит в том, чтобы отделитьвстроенные ресурсы среды выполнения в подпапку runtimes
внутри папки NuGet, чтобы макет был:
\lib\YourManagedCode.dll
\runtimes\win-x86\native\some.dll
\runtimes\win-x64\native\some.dll
\runtimes\linux-x64\native\libsome.so
\runtimes\osx-x64\native\some.dylib
Пример файла проекта может выглядеть следующим образом, при условии, что у вас уже есть папка среды выполнения:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="runtimes\**" Pack="true" PackagePath="runtimes" />
</ItemGroup>
</Project>
Если вам нужно выполнить локальное тестирование, вы также можете добавить CopyToOutputDirectory="PreserveNewest"
, чтобы обеспечить копирование файлов в выходной файл..NET Core должен иметь возможность разрешать файлы, расположенные в каталогах среды выполнения, для методов, помеченных [DllImport("some")]
.
На полученный пакет NuGet можно ссылаться как из проектов .NET Core, так и .NET Framework.Если какой-то «запасной вариант RID» (например, win10-x64
=> win-x64
) не работает в проектах .NET Framework, убедитесь, что этот проект также ссылается на последнюю версию пакета Microsoft.NETCore.Platforms
(он предоставляет NuGet графикизвестные значения, не имеет ничего общего с самим .NET Core ..).