когда я публикую основное веб-приложение asp.net в своей локальной файловой системе, оно всегда принимает конфигурацию production и переменную ASPNETCORE_ENVIRONMENT со значением = "Production".
как и где мне установить значение переменной ASPNETCORE_ENVIRONMENT, чтобы она учитывалась не только для отладки, но и для публикации ? я уже безуспешно пробовал следующие варианты:
- в настройках Windows
- в файле .pubxml
- в launchSettings.json
- в project.json
Ответы:
Помимо упомянутых выше вариантов, есть еще несколько решений.
1. Изменение файла проекта (.CsProj).
MSBuild поддерживает
EnvironmentName
свойство, которое может помочь установить правильную переменную среды в соответствии со средой, которую вы хотите развернуть. Имя среды будет добавлено в web.config на этапе публикации.Просто откройте файл проекта (* .csProj) и добавьте следующий XML.
В приведенном выше коде будет добавлено имя среды, как
Development
для конфигурации отладки, или если конфигурация не указана. Для любой другой конфигурации имя среды будетProduction
в сгенерированном файле web.config. Подробнее здесь2. Добавление свойства EnvironmentName в профили публикации.
Мы также можем добавить
<EnvironmentName>
свойство в профиль публикации. Откройте файл профиля публикации, который находится в папке.Properties/PublishProfiles/{profilename.pubxml}
Это установит имя среды в web.config при публикации проекта. Подробнее здесь3. Параметры командной строки с использованием dotnet publish
Кроме того, мы можем передать свойство
EnvironmentName
как параметр командной строкиdotnet publish
команде. Следующая команда будет включать переменную среды, какDevelopment
в файле web.config.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
источник
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
это именно то, что я искал. Спасибо!Опция 1:
Чтобы установить переменную среды ASPNETCORE_ENVIRONMENT в Windows,
Командная строка -
setx ASPNETCORE_ENVIRONMENT "Development"
PowerShell -
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Для других ОС обратитесь к этому - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
Вариант 2:
Если вы хотите установить ASPNETCORE_ENVIRONMENT с помощью,
web.config
добавьтеaspNetCore
вот так:источник
Простой способ установить его в Visual Studio IDE.
Проект> Свойства> Отладка> Переменные среды
источник
Вы должны следовать инструкциям, приведенным в документации , используя
web.config
.Обратите внимание, что вы также можете установить другие переменные среды.
источник
Вот как мы можем установить во время выполнения:
источник
Создайте свои файлы appsettings. *. Json. (Примеры: appsettings.Development.json, appsettings.Staging.json, appsettings.Production.json)
Добавьте свои переменные в эти файлы.
Создайте отдельный профиль публикации для каждой среды, как обычно.
Откройте PublishProfiles / Development.pubxml (имя будет основано на том, что вы назвали профилем публикации).
Просто добавьте тег в PublishProfile, чтобы установить переменную EnvironmentName , все остальное сделает соглашение об именах файлов appsettings. *. Json.
Ссылка: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1
См. Раздел «Настройка среды».
источник
В последней версии dotnet cli (2.1.400 или выше) вы можете просто установить это свойство msbuild,
$(EnvironmentName)
и инструменты публикации позаботятся о добавлении ASPNETCORE_ENVIRONMENT в web.config с именем среды.Кроме того, поддержка XDT доступна начиная с версии 2.2.100-preview1.
Образец: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md
источник
you can just set this msbuild property $(EnvironmentName) and publish
или дать ссылку?Эту переменную можно сохранить в json. Например, envsettings.json с содержимым, как показано ниже.
Позже измените свой program.cs, как показано ниже
Таким образом, он всегда будет включен в публикацию, и вы можете изменить его на необходимое значение в зависимости от среды, в которой размещен веб-сайт. Этот метод также можно использовать в консольном приложении, поскольку изменения внесены в Program.cs.
источник
Я обнаружил, что это работает для меня, установив эту переменную непосредственно на платформе Azure (если вы ее используете). Просто выберите свое веб-приложение -> конфигурация -> настройки приложения и добавьте переменную и ее значение, затем нажмите кнопку «Сохранить».
источник
Другой вариант, который мы используем в наших проектах, чтобы иметь возможность установить среду для каждого сайта, - это добавить в проект файл Parameters.xml со следующим содержимым:
Действие сборки для этого файла - Содержимое, а действие копирования - Копировать, если новее, поэтому он будет частью пакета для развертывания.
Затем, чтобы развернуть пакет и настроить среду в выпуске в рамках задачи «WinRM - развертывание веб-приложений IIS» (она работает так же хорошо при использовании задачи «развертывание веб-приложения IIS»), мы устанавливаем дополнительные аргументы для msdeploy. :
Таким образом, у нас может быть несколько выпусков, использующих один и тот же артефакт, но развернутых в разных средах.
источник
Я знаю, что это старый пост, но подумал, что добавлю в него свое простое решение, поскольку его никто не предлагал.
Я использую текущий каталог для определения текущей среды, затем переворачиваю строку подключения и переменную среды. Это отлично работает, если у вас есть соглашение об именах для папок вашего сайта, например test / beta / sandbox.
источник