Как правильно упаковать и использовать библиотеку .NET Standard с несколькими средами выполнения на net472? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь создать мультиплатформенный пакет для 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 возникает то же исключение.

Исключение действительно имеет смысл, как я вижу, сборка не копируется в выходной каталог.

Теперь вопрос в том, какая из следующих проблем и как ее исправить:

  1. myВ пакете .nuget чего-то не хватает, поэтому ничего не выбрано для цели net472 (хотя я ожидаю, что это просто с использованием netstandard2.0 stuff)
  2. в моем тестовом приложении .csproj что-то отсутствует (возможно, мне нужно указатьв .csproj все поддерживаемые среды выполнения?)
  3. установка, подобная этой, вообще не поддерживается инструментами

Если есть решение вышеуказанной проблемы, будет ли оно работатьдля старых проектов .NET Framework wит packages.config?

1 Ответ

0 голосов
/ 15 февраля 2019

Как предполагает Орен Новотный в 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 / к пакету в дополнение к его текущему содержимому (еще не пробовал).

...