При публикации, как я нацеливаюсь на конкретные .NET Core Runtime? - PullRequest
0 голосов
/ 27 ноября 2018

Когда я публикую свое приложение .NET Core, оно выводит каталог runtimes со следующими подкаталогами:

- publish/runtimes/
   - debian.8-x64/
   - fedora.23-x64/
   - fedora.24-x64/
   - opensuse.13.2-x64/
   - opensuse.42.1-x64/
   - osx/
   - osx.10.10-x64/
   - rhel.7-x64/
   - ubuntu.14.04-x64/
   - ubuntu.16.04-x64/
   - ubuntu.16.10-x64/
   - unix/
   - win/

На моем CI / CD-сервере я публикую свои приложения с помощью этой команды:

dotnet publish -c Release -o ..\publish

Мои параметры публикации в файле проекта следующие:

  • Целевая среда: netcoreapp2.1
  • Режим развертывания: Зависит от платформы
  • Target Runtime: win-x64

Я планирую публиковать это приложение только на Windows 2016 Server, поэтому папки OSX / Linux / Unix runtimes не нужны.Хуже того, в некоторых случаях эти runtimes папки содержат известные уязвимые dlls, которые приводят к ложному положительному сканированию OSA.

Есть ли способ настроить проект на вывод только папки времени выполнения win?

Обновление

Я попробовал предложения @ahsteele, и результат добавления RID в мои файлы csproj такой же, как если бы я не указал RID.

Когда я запускаю пример команды CI / CD

dotnet publish -c Release -r win10-x86 -o ..\publish

Я считаю, что это создает автономное развертывание.Поскольку мой каталог публикации переходит от 55 МБ к 120 МБ и из 237 файлов в 482 файла.

Обновление 2

Я попытался указать свой стартовый проект для шага публикации ион создает каталоги времени выполнения, чтобы быть более компактным.

Вот команда запуска, которую я выполняю:

dotnet publish .\startupProject.csproj -c Release -o ..\publish

И это вывод:

- publish/runtimes/
   - unix/
   - win/

Некоторые из проектов в моем решении определяют netstandard2.0, а некоторые - netcoreapp2.0.Документирует ли Microsoft где-нибудь, что если вы не укажете целевую платформу или определенный файл csproj, она предоставит вам все целевые платформы для всех возможных сред выполнения?

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете указать время выполнения с помощью переключателя dotnet publish -r.Из каталога .NET Core RID - идентификаторы Windows идентификаторы Windows 10 / Windows Server 2016:

  • win10-x64
  • win10-x86
  • win10-arm
  • win10-arm64

Это означает, что ваша команда CI / CD может указывать время выполнения:

dotnet publish -c Release -r win10-x86 -o ..\publish

В качестве альтернативы один RID можетбыть установлен в элементе <RuntimeIdentifier> вашего файла проекта:

<RuntimeIdentifier>win10-x64</RuntimeIdentifier>

Несколько RID могут быть определены как список, разделенный точкой с запятой в файле проекта <RuntimeIdentifiers> элемент:

<RuntimeIdentifiers>win10-x64;win10-x86</RuntimeIdentifiers>
...