Как запускать скрипты на основе конфигурации решения в ASP.NET Core

У меня есть следующий script в моем project.json файле, который я использую для создания моего проекта библиотеки классов в пакете NuGet. Я не хочу создавать пакеты Debug NuGet. Как я могу ограничить этот script только тогда, когда для конфигурации решения установлен режим Release, чтобы ускорить время сборки в режиме отладки?

В качестве альтернативы, как любопытство, как передать конфигурацию решения в приведенную ниже команду, чтобы "Release" не была жестко закодирована.

"scripts": {
  "postcompile": [
    "dotnet pack --no-build --configuration Release"
  ]
}

Ответ 1

Вы можете использовать %compile:Configuration% для получения текущей конфигурации. Здесь - список переменных, доступных для скриптов precompile и postcompile.

Ответ 2

Чтобы на самом деле ограничить создание пакета nuget на основе конфигурации, вам нужно передать его в script, как этот файл makeNuget.cmd, который я храню в корне моего проекта:

@Echo off
IF "%1" == "%2" dotnet pack --no-build --configuration %1 -o ../%3

Затем в моем проекте .json у меня есть:

  "scripts": {        
    "postcompile": [
      "makeNuget.cmd %compile:Configuration% Release \\packages\\%project:Name%"
    ]
  }

Это создает пакет nuget и помещает его в папку уровня решения/[имя проекта] (хотя вам может потребоваться отредактировать ссылку относительной папки в параметре -o в зависимости от вашего макета решения). Кроме того, вам не нужен .cmd, по умолчанию .cmd выводится для окон и .sh для других сред.

Я также установил конфигурацию цели таким образом, чтобы script был общим и может использоваться независимо от имени конфигурации, которое я выбрал в качестве моей конфигурации "release".