публиковать ядро ​​сборки среды управления - PullRequest
0 голосов
/ 25 октября 2018

Что управляет средой, передаваемой в веб-пакет, при запуске публикации запускает сборку?Посмотрите на это:

1>------ Build started: Project: MeshCut, Configuration: Debug Any CPU ------
1>MeshCut -> D:\MeshCut\bin\Debug\netcoreapp2.1\MeshCut.dll
2>------ Publish started: Project: MeshCut, Configuration: Debug Any CPU ------
MeshCut -> D:\MeshCut\bin\Debug\netcoreapp2.1\MeshCut.dll
npm install
audited 11025 packages in 7.787s
found 0 vulnerabilities

node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod
Hash: dadea967a4be0fa40482
Version: webpack 4.22.0

. . .
    Publish Succeeded.

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

В первой строке это явно отладочная сборка, но эта строка

node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod

явно пропущена env.prod, что делает невозможным выяснить, почемув работе возникает ошибка, которая не возникает, когда сервер запускается из IDE.

Я попытался установить переменную окружения ASPNETCORE_ENVIRONMENT в значение "Разработка", но это не помогло, возможно, потому что это запусквремя вещь.

В конечном счете это вещь msbuild.Комбинация файла pubxml и файла csproj является входными данными для msbuild.

В файле csproj env.prod является литералом.Если есть какой-то способ сделать это значение зависимым от типа сборки (release / debug), проблема может быть решена.

Есть еще один вопрос, вдохновленный принципиально той же проблемой, но спрашивающий удовлетворен тем, что обнаружил, что он может управлять им, отредактировав csproj.Это не полезно для соблюдения релиза / отладки.

Это вещь MSBUILD.Это означает, что загляните в файл csproj и, конечно же, мы найдем это

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
  <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec Command="npm install" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --env.prod" />

, и легко найти виновных во втором и третьем утверждениях Exec.

Остается вопрос, как условно указать значение параметра или как условно указать совершенно другую командную строку.

В этой документации Microsoft описывается, каксделать второй вариант, но msbuild не понравилась моя попытка обернуть элементы exec элементами choose и when, и я все еще мог использовать некоторую помощь.

1 Ответ

0 голосов
/ 25 октября 2018

Это вещь MSBUILD.Это означает, что загляните в файл csproj и, конечно же, мы найдем это

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
  <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec Command="npm install" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --env.prod" />

, и виновника легко найти во втором из операторов Exec.

Exec поддерживает атрибут Condition.К счастью, в другом месте файла CSPROJ одна из целей уже зависит от того, какое именно условие нам необходимо.С небольшой копией / вставкой и настройкой код становится ...

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
  <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
  <Exec Command="npm install" />
  <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.dev" 
        Condition=" '$(Configuration)' == 'Debug' " />
  <Exec Command="node node_modules/webpack/bin/webpack.js --env.dev" 
        Condition=" '$(Configuration)' == 'Debug' " />

  <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod" 
        Condition=" '$(Configuration)' == 'Release' " />
  <Exec Command="node node_modules/webpack/bin/webpack.js --env.prod" 
        Condition=" '$(Configuration)' == 'Release' " />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...