Подтвердить что ты не робот

Как установить ASPNETCORE_ENVIRONMENT для рассмотрения для публикации основного приложения asp.net?

когда я публикую мое основное веб-приложение asp.net в своей локальной файловой системе, он всегда принимает переменную production-config и ASPNETCORE_ENVIRONMENT со значением = "Производство".

как и где мне нужно установить значение переменной ASPNETCORE_ENVIRONMENT, чтобы оно учитывалось не только для отладки, но и для публикации? Я уже пробовал следующие параметры без успеха:

  • в настройках Windows
  • в файле .pubxml
  • в launchSettings.json
  • в project.json
4b9b3361

Ответ 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();
     }
 }

Таким образом, он всегда будет включен в публикацию, и вы можете изменить его на требуемое значение в зависимости от среды, в которой размещен веб-сайт.