Похоже, это не работает в основном консольном приложении:
dotnet publish myproject.csproj /p:EnvironmentName=MyEnvironment
Есть ли альтернатива публикации консольного приложения, которое программно изменяет переменную имени среды?
Я имею в виду, что нет смысла перекомпилировать приложение только для изменения среды, в этом весь смысл ASPNETCORE_ENVIRONMENT (см. документы: docs.microsoft.com/en-us/aspnet/core/fundamentals/…). То, как вы его устанавливаете, зависит от вашей целевой среды, в Linux вы можете сделать это с помощью ASPNETCORE_ENVIRONMENT=Development dotnet run ./MyApp.dll и т. д., Тогда это действительно только для одной команды выполнения. Все способы установки смотрите по ссылке
вы можете опубликовать веб-приложение и изменить переменную среды с помощью приведенной выше команды, поэтому мне интересно, как это можно сделать в консольном приложении. Если вы не хотите помочь, вам не нужно ничего публиковать.
Вы даже не предоставляете информацию о том, какую целевую/хостинговую платформу вы намереваетесь развернуть в первую очередь. Если бы вы нашли время, чтобы прочитать предоставленную ссылку, вы бы поняли, что каждая целевая платформа требует, чтобы вы установили переменную среды в целевой системе хостинга, за исключением Для развертываний Windows IIS, что вы делаете через файл .pubxml. Чтобы переопределить свойства проекта (а именно EnvironmentName, вам нужно использовать dotnet msbuild ... /p:EnvironmentName=Something). Это все еще нелогично и не так, как предполагалось для установки среды: P
"...за исключением развертываний Windows IIS...". Отсюда мой вопрос. Да, это развертывание Windows IIS, и да, мне нужно переопределить свойство проекта для среды. Если бы вы нашли время, чтобы прочитать мой вопрос, в нем говорится, что «dotnet msbuild ... /p:EnvironmentName=Something» не работает для консольных приложений: P
Извините, это -p:, а не /p:, ошибка копирования и вставки, но вы должны использовать dotnet msbuild (dotnet build тоже должно работать), а не dotnet publish, так как позже этот параметр отсутствует. Также на будущее: предоставьте достаточно информации, если хотите получить более точные ответы.
"dotnet msbuild" не публикует. Это не то же самое поведение. Я использую команду «публикация dotnet» в своем вопросе в веб-приложении, и она отлично работает.
Может быть, взглянуть на параметр -t??! См. документы
Итак, вы были правы в том, что он публикует, но по-прежнему не изменяет переменную среды, в чем здесь проблема.





Конфигурация в ASP.NET Core полностью экстернализована. Таким образом, вы ничего не можете сделать в рамках сборки (или, следовательно, опубликовать), что задаст среду. Один и тот же код можно опубликовать в нескольких разных местах, используя разные значения среды. Другими словами, среда является функцией адресата, а не акта публикации.
В рамках конвейера CI/D вы можете легко задавать переменные среды, но важно то, что команда dotnet publish не является конвейером CI/D. Например, это будет означать настройку чего-либо в Pipelines в Azure DevOps. Или, если вы не хотите заходить так далеко (хотя на самом деле вы должен), вы можете создать сценарий PowerShell, возможно, который будет соответствующим образом обрабатывать публикацию и настройку переменных среды.
Так что это невозможно. Затем я создам сценарий PowerShell, как было предложено, чтобы изменить app.config. Спасибо
интересный. Итак, как мне защитить, например, производственную строку подключения? раньше я не включал его в git и публиковал, используя конфигурацию Release.
Секреты любого рода должны находиться в конфигурации, которая вообще не является частью проекта (например, переменные среды), или, в идеале, в чем-то, что зашифровано в состоянии покоя (например, KeyVault).
Что вы ожидали от него? публикация только создает артефакты (которые вы копируете/отправляете на свой веб-сервер или платформу хостинга). Переменные среды оцениваются при запуске приложения, а не при его публикации. Вы просто устанавливаете переменную в своей среде публикации (служба приложений Azure, контейнер Docker, IIS или ваш хост Linux/Windows в зависимости от того, где вы нажмете)