Как правильно упаковать и использовать библиотеку.NET Standard с несколькими средами выполнения на net472?
Я пытаюсь сделать мультиплатформенный пакет для Python.NET, ориентированный на.NET Standard 2.0, используя этот проект.
Мне удалось создать пакет NuGet со следующей структурой:
ref
|- netstandard2.0
|- Python.Runtime.dll
runtimes
|- win
|- lib
|- netstandard2.0
|- Python.Runtime.dll
|- linux-x64
|- ...
Этот пакет отлично работает с тестовым приложением, основанным на новом формате.csproj + PackageReferece
, но только если я нацеливаюсь netcoreappX.X
, В этом случае он копирует весь runtimes
папка для вывода на dotnet publish
и работает без проблем.
Если я изменю TargetFramework
в net472
, и то и другое dotnet build
а также dotnet publish
в Windows не удается скопировать любую версию Python.Runtime.dll из пакета, вызывая FileNotFoundException: Could not load file or assembly 'Python.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Это же исключение возникает при попытке запуска из Visual Studio.
Исключение на самом деле имеет смысл, так как я вижу, что сборка не копируется в выходной каталог.
Теперь вопрос в том, какая из следующих проблем и как ее исправить:
- в моем пакете.nuget чего-то не хватает, поэтому ничего не подобрано для
net472
цель (хотя я ожидаю, что просто используяnetstandard2.0
материал) - В моем тестовом приложении.csproj что-то отсутствует (может быть, мне нужно указать в.csproj все поддерживаемые среды выполнения?)
- подобная установка не поддерживается инструментами вообще
Если есть решение вышеуказанной проблемы, будет ли это работать для проектов.NET Framework старого стиля с packages.config
?
1 ответ
Как предложил Орен Новотный в https://github.com/dotnet/cli/issues/10806, есть две важные вещи.
Когда используешь dotnet run
или же dotnet publish
с net4xx
цели, в этом случае --runtime
должен быть указан.
За dotnet publish
общий, кажется, хорошо: dotnet run -r win
,
За dotnet run
Я должен был указать конкретный: dotnet run -r win7-x64
,
Чтобы избежать этого, я должен добавить lib/net4XX/ к пакету в дополнение к его текущему содержимому (еще не пробовал).