Как установить ASPNETCORE_ENVIRONMENT для рассмотрения для публикации основного приложения asp.net?
когда я публикую мое основное веб-приложение asp.net в своей локальной файловой системе, он всегда принимает переменную production-config и ASPNETCORE_ENVIRONMENT со значением = "Производство".
как и где мне нужно установить значение переменной ASPNETCORE_ENVIRONMENT, чтобы оно учитывалось не только для отладки, но и для публикации? Я уже пробовал следующие параметры без успеха:
- в настройках Windows
- в файле .pubxml
- в launchSettings.json
- в project.json
Ответы
Ответ 1
Option1:
Чтобы установить переменную среды ASPNETCORE_ENVIRONMENT в Windows,
Командная строка - setx ASPNETCORE_ENVIRONMENT "Development"
PowerShell - $Env:ASPNETCORE_ENVIRONMENT = "Development"
Для других ОС это - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
Option2:
Если вы хотите установить ASPNETCORE_ENVIRONMENT с помощью web.config
, тогда добавьте aspNetCore
, как это, -
<configuration>
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
Ответ 2
Помимо упомянутых выше вариантов, есть несколько других решений.
1. Изменение файла проекта (.CsProj)
MSBuild поддерживает свойство EnvironmentName
, которое может помочь установить правильную переменную среды в соответствии с той средой, которую вы хотите развернуть. Имя среды будет добавлено в файл web.config на этапе публикации.
Просто откройте файл проекта (*.csProj) и добавьте следующий XML.
<!-- Custom Property Group added to add the Environment name during publish
The EnvironmentName property is used during the publish for the Environment variable in web.config
-->
<PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
<EnvironmentName>Production</EnvironmentName>
</PropertyGroup>
Вышеупомянутый код добавляет имя среды как Development
для конфигурации отладки или, если конфигурация не указана. Для любой другой конфигурации имя среды будет Production
в сгенерированном файле web.config. Подробнее здесь
2. Добавление свойства EnvironmentName в профили публикации.
Мы также можем добавить свойство <EnvironmentName>
в профиль публикации. Откройте файл профиля публикации, который находится в Properties/PublishProfiles/{profilename.pubxml}
. Это установит имя среды в web.config при публикации проекта. Подробнее здесь
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
3. Параметры командной строки с использованием dotnet publish
Кроме того, мы можем передать свойство EnvironmentName
в качестве параметра командной строки команде dotnet publish
. Следующая команда включит переменную среды как Development
в файл web.config.
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
Ответ 3
Простой способ установить его в визуальной студии IDE.
Проект> Свойства> Отладка> Переменные среды
![enter image description here]()
Ответ 4
Вы должны следовать инструкциям, приведенным в документации, используя web.config
.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\aspnetcore-stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
Обратите внимание, что вы также можете установить другие переменные окружения.
Базовый модуль ASP.NET позволяет указать переменные среды для процесса, указанного в атрибуте processPath, указав их в одном или нескольких дочерних элементах environmentVariable элемента коллекции environmentVariables в элементе aspNetCore. Переменные среды, установленные в этом разделе, имеют приоритет над системными переменными среды для процесса.
Ответ 5
В последней версии 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
Ответ 6
Вот как мы можем установить во время выполнения:
public class Program
{
public static void Main(string[] args)
{
Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Ответ 7
Я обнаружил, что это работает для меня, установив эту переменную непосредственно на платформе Azure (если вы ее используете). Просто выберите ваше веб-приложение → конфигурация → настройки приложения и добавьте переменную и ее значение, затем нажмите кнопку Сохранить.
Ответ 8
Я просто хочу запретить Visual Studio записывать переменную среды в web.config. Это действительно запутывает вещи, так как объединяет значение со значениями, хранящимися в launchsettings.json, и на сервере, хранящемся в качестве фактической переменной среды.
Это абсолютно глупо, и на всю жизнь, когда так много разработчиков абсолютно одержимы Единой Ответственностью, когда дело доходит до кода, я не могу понять, ПОЧЕМУ они сделали это свойство настраиваемым в 50 различных местах и способах. Это самая глупая вещь, с которой я когда-либо сталкивался в VS 2019!
Ответ 9
Эта переменная может быть сохранена в формате json. Например, envsettings.json
с содержанием, как показано ниже
{
// Possible string values reported below. When empty it use ENV variable value or
// Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": "Development"
}
Позже измените ваш program.cs как показано ниже
public class Program
{
public static IConfiguration Configuration { get; set; }
public static void Main(string[] args)
{
var currentDirectoryPath = Directory.GetCurrentDirectory();
var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
var environmentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
var webHostBuilder = new WebHostBuilder()
.UseKestrel()
.CaptureStartupErrors(true)
.UseContentRoot(currentDirectoryPath)
.UseIISIntegration()
.UseStartup<Startup>();
// If none is set it use Operative System hosting enviroment
if (!string.IsNullOrWhiteSpace(environmentValue))
{
webHostBuilder.UseEnvironment(environmentValue);
}
var host = webHostBuilder.Build();
host.Run();
}
}
Таким образом, он всегда будет включен в публикацию, и вы можете изменить его на требуемое значение в зависимости от среды, в которой размещен веб-сайт.