9

У меня есть приложение ASP.NET Core (Web Api). В документации объясняется working with multiple environments, однако он не смог объяснить, как установить aspnetcore_environment при публикации веб-сайта.Как установить aspnetcore_environment в файл публикации?

Так позволяет сказать, что если у меня есть 3 среды Development, Staging и Production

  1. В классическом Web ASP.NET Application я использовал для создания 3 конфигураций сборки. Development, Staging и Production (Как показано на рисунке ниже). а затем 3 .pubxml файлов, по одному для каждой конфигурации. Нужно ли использовать тот же подход для приложения ASP.NET Core?

  2. Как установить aspnetcore_environment в файле .pubxml?

  3. Если подход, указанный в Вопросе 1, устарел, то каков альтернативный подход? (Я использую Jenkins для CI)

enter image description here

Update 1

Я понимаю, что я должен установить ASPNETCORE_ENVIRONMENT однако я не могу понять, где мы устанавливаем это? Во время разработки я могу установить это в профиле в launchSettings.json, однако вопрос был в том, как мы устанавливаем это при публикации в постановку или производство? устанавливаем ли переменную окружения на самом целевом сервере?

enter image description here

Update 2
Я нашел статью here, которая объясняет различные способы установки переменной окружения. Это частично ответило на мой вопрос. Однако, когда я опубликовать приложение, процесс публиковать не чтит переменные среды при публикации appsettings.{env.EnvironmentName}.json
я создал отдельный post для этого вопроса

+2

Возможный дубликат [Проходная среда для самостоятельного хостинга] (http://stackoverflow.com/questions/39203820/pass-hosting-environment-for-self-hosting). На этот вопрос уже был дан ответ. Просто используйте commandline/powershell/bash/azureportal, чтобы установить переменную окружения – Tseng

ответ

0

Я думаю, что вы не можете сделать это в публикации профиле. Вы должны установить переменную среды, например. ASPNETCORE_ENVIRONMENT = Стадия. Мне нужно было сделать аналогичную вещь с основным веб-приложением aspnet на Azure. Я хотел иметь dev, постановку и производство. То, как я это делал, было точно с переменной env.

5

При размещении приложения в IIS вы можете установить переменную окружения в web.config.

https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

Чтобы создать его на публикацию добавить web.config в корневом каталоге вашего проекта, «DotNet публиковать» будет использовать этот файл в качестве основы для одного, который генерируется для в папке публикации. Затем вы можете изменить значение в своей системе развертывания.

<?xml version="1.0" encoding="utf-8" ?> 
<!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS --> 
<configuration> 
<system.webServer> 
    <aspNetCore stdoutLogEnabled="true"> 
    <environmentVariables> 
     <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> 
    </environmentVariables> 
    </aspNetCore> 
</system.webServer> 
</configuration> 
+0

, но тогда вам нужно создать несколько web.config, по одному для каждой поддерживаемой среды, такой как development, uat, prod и т. Д. Я нашел ответ в этой SO post http: // stackoverflow.com/questions/40748518/how-to-configure-mutilple-aspnetcore-environment-on-same-machine Вы можете установить переменную среды в IIS непосредственно на уровне приложения – LP13

+0

Зависит немного от варианта использования, если это корпоративная среда где у вас нет контроля над серверами хостинга, выполняющими его с помощью web.config, может быть лучшим вариантом, поскольку заставить кого-то обновить конфигурацию IIS или пользовательскую среду может быть долгим процессом. Если у вас есть контроль над настройкой сервера, переменная среды может быть лучшим вариантом. –

0

Для установки двух или более профилей, необходимо создать дополнительный профиль, так как mentioned in a linked article, и ваш launchSettings.json будет содержать массив:

"profiles": { 
    "IIS Express": { 
    "commandName": "IISExpress", 
    "launchBrowser": true, 
    "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Development" 
    } 
    }, 
    "IIS Express (Staging)": { 
    "commandName": "IISExpress", 
    "launchBrowser": true, 
    "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Staging" 
    } 
    } 
} 

Чтобы быть в состоянии прочитать переменную окружения, вам нужно к specify it during startupи вызова дополнительный метод AddEnvironmentVariables переменным принять меры:

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      // general properties 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      // specify the environment-based properties 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      // do not forget to add environment variables to your config! 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 
} 
0

Простой способ установить его в visual studio IDE.

переменные Проект> Свойства> Debug> Окружающая среда

enter image description here

Пожалуйста, не используйте переменные окружения уровня машины вместо объема в приложении есть возможность другого приложения делает же, изменение может повлиять на другое приложение.