환경 변수를 설정하여 IIS에 게시


134

이 두 가지 질문 / 답변을 읽으면 IIS 8.5 서버에서 Asp.net 5 앱을 실행할 수있었습니다.

Windows Server의 IIS에 Asp.net vNext Early 베타 게시

IIS에서 작동하도록 MVC6 앱을 구성하는 방법은 무엇입니까?

문제는 IIS에서 실행될 때에도 웹 앱이 여전히 env.EnvironmentName값을 사용 하고 있다는 것 Development입니다.

또한 동일한 서버에서 동일한 웹 (스테이징, 프로덕션)의 두 가지 버전을 실행하고 싶기 때문에 각 웹의 변수를 별도로 설정하는 방법이 필요합니다.

이것을하는 방법?


4
하나는 일반적으로 개발, 스테이징 및 프로덕션의 세 가지 네트워크 환경이 있습니다. 웹 서버는 하나 의 환경에 있습니다. 따라서 서버의 시스템 환경 변수 설정은 일반적으로 실제 제한이 아닙니다. 여전히 Visual Studio에서 디버깅 Properties\launchSettings.json하기 위해 다른 환경 을 시뮬레이션 하는 데 사용할 수 있습니다 .
Oleg

답변:


286

이 답변은 원래 ASP.NET Core RC1 용으로 작성되었습니다. RC2에서 ASP.NET Core는 일반 httpPlafrom 처리기에서 aspnetCore 관련 처리기로 이동했습니다. 3 단계는 사용중인 ASP.NET Core 버전에 따라 다릅니다.

사용자의 환경 변수를 설정하거나 여러 명령 항목을 만들 필요없이 ASP.NET Core 프로젝트의 환경 변수를 설정할 수 있습니다.

  1. IIS의 응용 프로그램으로 이동하여을 선택하십시오 Configuration Editor.
  2. 고르다 Configuration Editor
  3. 콤보 박스 에서 system.webServer/aspNetCore(RC2 및 RTM) 또는 system.webServer/httpPlatform(RC1)을 선택하십시오.Section
  4. 콤보 박스 Applicationhost.config ...에서 선택하십시오 From.
  5. enviromentVariables요소를 마우스 오른쪽 버튼으로 클릭 하고을 선택한 'environmentVariables' element다음을 선택하십시오 Edit Items. 여기에 이미지 설명을 입력하십시오
  6. 환경 변수를 설정하십시오.
  7. 창을 닫고 적용을 클릭하십시오.
  8. 끝난

이렇게하면 풀에 대한 특수 사용자를 만들거나에 추가 명령 항목을 만들 필요가 없습니다 project.json. 또한 각 환경에 대한 특수 명령을 추가하면 "빌드 한 번, 여러 번 배포"가 중단되므로dnu publish 게시하고 결과 아티팩트를 여러 번 배포하는 대신 각 환경에 대해 별도로 .

Mark G 및 tredder 덕분에 RC2 및 RTM 용으로 업데이트되었습니다.


12
3 단계에서는 system.webServer/aspNetCore대신 사용 했습니다.
Mark G

1
시스템 환경 변수는 시작시 프로세스에 의해 상속됩니다. 따라서 응용 프로그램을 실행하는 동안 일부 env 변수를 변경하면 기본적으로이 변경 사항을 볼 수 없습니다. 시스템 환경 변경 사항을 적용하려면 IIS가 프로세스를 만드는 방법에 따라 최소한 사이트, 풀 또는 IIS 서비스를 다시 시작해야합니다. 테스트해야합니다.
NickAb

7
다음 배포시 구성 편집기를 통해 추가 된 설정이 지워지지 않습니까?
Brad Gardner

11
@ brad-gardner web.config 대신 Applicationhost.config를 변경하면 배포간에 변경 사항이 유지됩니다.
NickAb 2016 년

15
Asp.Net 코어 2.0 작품
프랭크 캐논

34

<aspNetCore> 아래 의 <environmentVariables> 섹션으로 web.config 를 업데이트 하십시오.

<configuration>
  <system.webServer>
    <aspNetCore .....>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

또는 web.config를 덮어 쓸 때이 설정이 손실되지 않도록하려면 @NickAb에서 제안한대로 사이트 위치를 지정하여 applicationHost.config 를 비슷한 방식으로 변경 하십시오.

<location path="staging.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
<location path="production.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>

2
이것은 web.config가 프로젝트의 일부이며 VCS에서 버전이 지정되는 방식과 다릅니다. prod, staging, dev와 같은 여러 환경이있는 경우 각각에 대해 web.config를 변환하는 방법이 필요합니다. IIS에서 ApplicationHost.config를 변경하면이 IIS에만 영향을줍니다. 따라서 VCS에 하나의 web.config와 web.config 변수를 대체하는 IIS 고유의 환경 변수를 가질 수 있습니다. PowerShell iis.net/learn/manage/powershell/…을
NickAb

배포 할 때마다 web.config를 업데이트하지 않아도되는 @NickAb에게 감사합니다. 내 답변을 업데이트했습니다.
Trevor Daniels 2016 년

나는 점점 계속 PowerShell을에서이 일에 문제가 있어요 Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... : 일반적으로 나는 이런 식으로 뭔가 작성합니다 몇 가지 변수를 설정하는 Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging 임 내가 무엇을 누락?
Christian

나는 내가 아는 appcmd대신에 대신 사용 했다.
Christian

@Christian,이 답을 체크 아웃 : stackoverflow.com/a/50869935/33533 환경 변수의 이름과 값 이동을 해시 테이블에, 그래서 당신의 예에서이 될 것입니다Set-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
커티스가 매입

21

편집 : RC2 및 RTM 릴리스 에서이 조언은 오래되었습니다. 릴리스에서 이것을 달성하는 가장 좋은 방법은 각 환경에 대해 IIS에서 다음 web.config 섹션을 편집하는 것입니다.

system.webServer/aspNetCore:

environmentVariable 항목을 편집하고 환경 변수 설정을 추가하십시오.

ASPNETCORE_ENVIRONMENT : < Your environment name >


drpdrp의 접근 방식에 대한 대안으로 다음을 수행 할 수 있습니다.

  • project.json에서 ASPNET_ENV 변수를 Kestrel에 직접 전달하는 명령을 추가하십시오.

    "commands": {
        "Development": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Development",
        "Staging": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Staging",
        "Production": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Production"
    }
    
  • 게시 할 때 --iis-command옵션을 사용하여 환경을 지정하십시오.

    dnu publish --configuration Debug --iis-command Staging --out "outputdir" --runtime dnx-clr-win-x86-1.0.0-rc1-update1
    

이 접근 방식은 추가 IIS 사용자를 만드는 것보다 덜 방해가되는 것으로 나타났습니다.


11
Visual Studio의 msdeploy를 통해 게시하는 경우 그런 다음 <IISCommand> 스테이징 </ IISCommand>을 .pubxml 파일에 넣을 수 있으며 게시 UI에서 지정할 수 없어도 지정된 IIS 명령을 사용하여 배포됩니다.
Dean North

@ DeanNorth-이것은 황금입니다! 챔피언처럼 작동합니다! 공유해 주셔서 감사합니다!
S. Rasmussen

17

IIS 웹 서버에서 호스팅되는 웹 응용 프로그램 (PRODUCTION, STAGING, TEST)이 있습니다. 따라서 특정 값 (예 : STAGING)으로 설정하면 다른 응용 프로그램에 영향을주기 때문에 ASPNETCORE_ENVIRONMENT 작업자의 시스템 환경 변수에 의존 할 수 없습니다.

이 문제를 해결하기 위해 Visualstudio 솔루션 내에 사용자 정의 파일 (envsettings.json)을 정의했습니다.

여기에 이미지 설명을 입력하십시오

다음 내용으로 :

{
  // Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
  // - Production
  // - Staging
  // - Test
  // - Development
  "ASPNETCORE_ENVIRONMENT": ""
}

그런 다음 내 응용 프로그램 유형 (생산, 준비 또는 테스트)에 따라이 파일을 적절하게 설정했습니다 .TEST 응용 프로그램을 배포한다고 가정하면 다음과 같습니다.

"ASPNETCORE_ENVIRONMENT": "Test"

그런 다음 Program.cs 파일에서이 값을 검색 한 다음 webHostBuilder의 환경을 설정하십시오.

    public class Program
    {
        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 enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

            var webHostBuilder = new WebHostBuilder()
                .UseKestrel()
                .CaptureStartupErrors(true)
                .UseSetting("detailedErrors", "true")
                .UseContentRoot(currentDirectoryPath)
                .UseIISIntegration()
                .UseStartup<Startup>();

            // If none is set it use Operative System hosting enviroment
            if (!string.IsNullOrWhiteSpace(enviromentValue)) 
            { 
                webHostBuilder.UseEnvironment(enviromentValue);
            }

            var host = webHostBuilder.Build();

            host.Run();
        }
    }

publishOptions (project.json)에 envsettings.json을 포함시켜야합니다.

  "publishOptions":
  {
    "include":
    [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "envsettings.json",
      "appsettings.json",
      "appsettings*.json",
      "web.config"
    ]
  },

이 솔루션을 사용하면 envoroment 변수 값과 관계없이 ASP.NET CORE 응용 프로그램을 동일한 IIS에서 호스팅 할 수 있습니다.


아주 좋은 제안은 스왑입니다. var currentDirectoryPath = Directory.GetCurrentDirectory (); var currentDirectoryPath = PlatformServices.Default.Application.ApplicationBasePath의 경우; 이것은 현재 디렉토리를 얻는 훨씬 안전한 방법입니다.
피터 코타 스

7
프레임 워크의 구성을 관리하기 위해 다른 구성 계층을 만들어야 할 때 얼마나 큰 경험이 될까요?
Kugel

16

광범위한 인터넷 검색 후 두 단계로 구성된 작동하는 솔루션을 찾았습니다.

첫 번째 단계는 시스템 전체 환경 변수 ASPNET_ENV를 프로덕션으로 설정 하고 Windows 서버를 다시 시작하는 것 입니다. 그 후 모든 웹 앱은 'Production'값을 EnvironmentName으로 가져옵니다.

두 번째 단계 (웹 준비에 'Staging'값을 사용하도록 설정)는 제대로 작동하기가 다소 어려웠지만 다음과 같습니다.

  1. 서버에서 새 Windows 사용자 (예 : StagingPool) 를 작성하십시오 .
  2. 이 사용자의 경우 값이 'Staging'인 새 사용자 변수 ASPNETCORE_ENVIRONMENT를 작성하십시오 (이 사용자로 로그인하거나 regedit를 통해 수행 할 수 있음)
  3. IIS 관리자에서 관리자로 다시 스테이징 웹이 실행중인 애플리케이션 풀을 찾고 고급 설정에서 ID를 사용자 StagingPool로 설정 하십시오 .
  4. 또한 환경 변수가로드되도록 사용자 프로파일로드true로 설정하십시오 . <-매우 중요합니다!
  5. StagingPool 에 웹 폴더에 대한 액세스 권한이 있는지 확인하고 애플리케이션 풀 중지 및 시작을 수행하십시오.

이제 스테이징 웹에 EnvironmentName이 'Staging'으로 설정되어 있어야합니다.

업데이트 : Windows 7 이상 에는 지정된 사용자에 대해서도 CMD 프롬프트에서 환경 변수를 설정할 수 있는 명령 이 있습니다. 이 도움말과 샘플을 출력합니다.

>setx /?

1
ASP.NET 5 RC1에서 환경 변수가 Hosting : Environment로 변경되었습니다.
Grady Werner

Azure Web App에 배포 할 때 "사용자 프로필로드"를 어떻게 true로 설정합니까?
Puneet Ghanshani

@PunitGanshani 이해하는 바와 같이 환경 키 / 값 쌍을 설정할 수있는 웹 앱용 azure 포털에는 "애플리케이션 설정"섹션이 있습니다. azure.microsoft.com/en-us/documentation/articles/…
drpdrp

@GradyWerner RC2의 경우 현재 시점에서 ASPNET_ENVIRONMENT ;-)로 변경 중입니다.
b.pell

1
@ b.pell 그것은 이제 ASPNETCORE_ENVIRONMENT 인 것처럼 보입니다 :)
Mark G

11

또는 다음을 사용하여 원하는대로 ASPNETCORE_ENVIRONMENTdotnet publish 명령에 인수로 전달할 수 있습니다 .

/p:EnvironmentName=Staging

예 :

dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

그러면 프로젝트에 지정된 올바른 환경으로 web.config가 생성됩니다.

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
</environmentVariables>

9

위에서 언급 한 옵션 외에 자동화 된 배포에 적합하거나 구성 변경이 적은 몇 가지 다른 솔루션이 있습니다.

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. 다음 명령은 Developmentweb.config 파일에서와 같이 환경 변수를 포함 합니다.

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development


7

@tredder의 답변을 확장하려면 다음을 사용하여 환경을 변경할 수 있습니다 appcmd

각색

%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST

생산

%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST


다음은 IIS가 설치되지 않은 빌드 서버에서 Powershell을 사용하여 동일한 작업을 수행하는 방법입니다. gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
Mark Arnott

"staging.example.com"또는 "example.com"을 지정하면 해당 특정 웹 사이트에만 변수가 적용됩니다. 생략하면 서버의 모든 웹 사이트에 대한 전역 변수가 생성됩니다.
deadlydog

6

한 곳에서 알아야 할 사항 :

  • 환경 변수가 구성 설정을 대체하려면 앞에 접두사를 붙여야합니다 ASPNETCORE_.
  • JSON 구성에서 하위 노드를 일치 시키려면 :구분자로 사용하십시오 . 플랫폼이 환경 변수 키에서 콜론을 허용하지 않으면 __대신 사용하십시오.
  • 설정이에서 끝나기를 원합니다 ApplicationHost.config. IIS 구성 편집기를 사용하면 입력 내용이 응용 프로그램에 기록되고 Web.config다음 배포시 덮어 쓰기됩니다.
  • 수정의 ApplicationHost.config경우 appcmd.exe수정 내용의 일관성을 유지하기 위해 사용하려고합니다 . 예:%systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_AWS:Region',value='eu-central-1']" /commit:site

  • URL 안전하지 않은 문자는 %u007b왼쪽 중괄호 와 같이 유니 코드로 이스케이프 할 수 있습니다 .

  • 현재 설정을 나열하려면 (Web.config의 값과 결합) : %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • 동일한 키에 대해 구성 키를 여러 번 설정하도록 명령을 실행하면 여러 번 추가됩니다! 기존 값을 제거하려면 다음과 같은 것을 사용하십시오 %systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /-"environmentVariables.[name='ASPNETCORE_MyKey',value='value-to-be-removed']" /commit:site.

1
참고로하는 /commit:site변경 사항이 순서의 Web.config에 기록 된에 저장하기 위해 ApplicationHost.config사용해야 하나/commit:apphost
천사 요르다 노프

-section:system.webServer/aspNetCore /-"environmentVariables.Azure 릴리스 파이프 라인에서 (환경 변수를 제거하기 위해 빼기)를 실행하는 데 실패했습니다. 오류는 hresult:80070032, message:Command execution failed입니다. 그러나 clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:site잘 작동합니다. 웹 사이트에 대한 전체 aspNetCore 섹션을 지우지 만 릴리스 중에 매개 변수화되므로 문제가되지 않습니다.
oleksa

6

다른 답변과 마찬가지로 ASP.NET Core 2.1 환경 설정이 배포 전반에 걸쳐 유지되고 특정 사이트에만 적용되도록하고 싶었습니다.

Microsoft의 설명서에 따르면 IIS 10의 다음 PowerShell 명령을 사용하여 앱 풀에서 환경 변수를 설정할 수 있습니다.

$appPoolName = "AppPool"
$envName = "Development"
cd "$env:SystemRoot\system32\inetsrv"
.\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$appPoolName'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='$envName']" /commit:apphost

불행히도 여전히 IIS 8.5를 사용해야하며 운이 좋지 않다고 생각했습니다. 그러나 간단한 PowerShell 스크립트를 실행하여 ASPNETCORE_ENVIRONMENT에 대한 사이트 별 환경 변수 값을 설정할 수 있습니다.

Import-Module -Name WebAdministration
$siteName = "Site"
$envName = "Development"
Set-WebConfigurationProperty -PSPath IIS:\ -Location $siteName -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = $envName }

5

편집과 @tredder 솔루션 applicationHost.config 파일은 당신이 만약 작품이 IIS에 가상 디렉터리 내에있는 여러 가지 응용 프로그램을 가지고 있다는 것입니다.

내 경우는 :

  • 나는이 할 API의 프로젝트와 APP의 다른 가상 디렉터리에 배치, 동일한 도메인에서, 프로젝트를
  • 루트 페이지 XXX 는 ASPNETCORE_ENVIRONMENT 변수를 가상 디렉터리의 하위 항목으로 전파하지 않는 것 같습니다.
  • ... @ NickAb에 설명 된대로 가상 디렉토리 내의 변수를 설정할 수 없습니다 (오류가 발생했습니다 . 요청이 지원되지 않습니다. (HRESULT 예외 : 0x80070032) : 구성 편집기에서 변경 사항을 저장하는 동안) :
  • 로가는 applicationHost.config 파일 과 같이 노드를 생성하고 수동 :

    <location path="XXX/app"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location> <location path="XXX/api"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location>

IIS를 다시 시작하면 작업이 완료되었습니다.


0

오류에 대한 세부 정보를 얻으려면 해당 응용 프로그램 풀에 환경 변수 추가ASPNETCORE_ENVIRONMENTsystem.applicationHost/applicationPools 해야했습니다 .

참고 : 필자의 경우 ASP.NET Core 2웹 응용 프로그램은에서 호스팅되는 웹 응용 프로그램 이었습니다 IIS 10. Configuration Editor에서 를 통해 수행 할 수 있습니다 IIS Manager( 에서이 편집기를 찾을 수있는 위치 는 구성 편집기 를 사용하여 콜렉션 편집 참조 IIS Manager).


0

Web.config에서 환경 구성을 사용하여 IIS를 게시하기위한 리포지토리를 만들었습니다.

https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment

  • 설정
    • .csproj 및 .user.csproj 파일의 섹션을 프로젝트 파일로 가져옵니다.
    • MyAspNetEnvironment.props, web.development.config 및 web.production.config 파일을 가져 오십시오.
  • 구성
    • user.csproj의 ASPNETCORE_ENVIRONMENT 속성 값을 적절하게 변경하십시오.

이것은 질문에 대한 양질의 답변 을 제공하지 않는 것 같습니다 . 이 솔루션의 전체 세부 사항을 추가하여 답변을 편집하거나 제거하고 질문에 대한 의견으로 게시하십시오. 감사!
sɐunıɔ ןɐ qɐp

0

@Christian Del Bianco 가 제공 하는 답변을 수정했습니다 . .net core 2 및 upper의 프로세스를 project.json 파일로 변경했습니다.

  1. 먼저, 루트 디렉토리에 appsettings.json 파일을 작성 하십시오. 내용으로

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. 그런 다음 필요한 구성으로 또 다른 두 개의 설정 파일 appsettings.Development.jsonappsettings.Production.json 을 작성하십시오.

  3. Program.cs 파일에 환경을 설정하는 데 필요한 코드를 추가 하십시오.

    public class Program
    {
    public static void Main(string[] args)
    {
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    
      ***var currentDirectoryPath = Directory.GetCurrentDirectory();
        var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
        var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
        var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();***
    
        try
        {
            ***CreateWebHostBuilder(args, enviromentValue).Build().Run();***
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of setup related exception");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }
    
    public static IWebHostBuilder CreateWebHostBuilder(string[] args, string enviromentValue) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()
            ***.UseEnvironment(enviromentValue);***
    

    }

  4. 게시 된 디렉토리로 복사하기 위해 envsettings.json.csproj 파일에 추가하십시오 .

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. 이제 envsettings.json 파일 에서 원하는대로 ASPNETCORE_ENVIRONMENT 를 변경 하고 게시하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.