[asp.net-core] ASPNETCORE_ENVIRONMENT를 asp.net 핵심 응용 프로그램 게시에 고려하도록 설정하는 방법은 무엇입니까?

내 asp.net 핵심 웹 응용 프로그램을 로컬 파일 시스템에 게시 할 때 항상 값이 “Production”인 production-config 및 ASPNETCORE_ENVIRONMENT 변수를 사용합니다.

디버깅뿐만 아니라 게시에도 고려되도록 ASPNETCORE_ENVIRONMENT 변수의 값을 어떻게 그리고 어디에 설정해야 합니까? 나는 이미 성공하지 않고 다음 옵션을 시도했습니다.

  • Windows 설정에서
  • .pubxml 파일
  • launchSettings.json에서
  • project.json에서



답변

위에서 언급 한 옵션 외에 몇 가지 다른 솔루션이 있습니다.

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


답변

옵션 1:

Windows에서 ASPNETCORE_ENVIRONMENT 환경 변수를 설정하려면

명령 줄- setx ASPNETCORE_ENVIRONMENT "Development"

PowerShell- $Env:ASPNETCORE_ENVIRONMENT = "Development"

다른 OS의 경우 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>


답변

Visual Studio IDE에서 설정하는 간단한 방법입니다.

프로젝트> 속성> 디버그> 환경 변수

여기에 이미지 설명 입력


답변

사용 하여 설명서에 제공된 지침을 따라야 합니다 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 Core 모듈을 사용하면 aspNetCore 요소 아래에있는 environmentVariables 컬렉션 요소의 하나 이상의 environmentVariable 자식 요소에 지정하여 processPath 특성에 지정된 프로세스에 대한 환경 변수를 지정할 수 있습니다. 이 섹션에서 설정 한 환경 변수는 프로세스의 시스템 환경 변수보다 우선합니다.


답변

이것이 우리가 런타임에서 설정하는 방법입니다.

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();
}


답변

최신 버전의 dotnet cli (2.1.400 이상)에서는이 msbuild 속성을 설정하기 만하면 $(EnvironmentName)게시 도구가 환경 이름을 사용하여 web.config에 ASPNETCORE_ENVIRONMENT를 추가하는 작업을 처리합니다.

또한 XDT 지원은 2.2.100-preview1부터 사용할 수 있습니다.

샘플 : https://github.com/vijayrkn/webconfigtransform/blob/master/README.md


답변

  1. appsettings. *. json 파일을 만듭니다. (예 : appsettings.Development.json, appsettings.Staging.json, appsettings.Production.json)

  2. 해당 파일에 변수를 추가하십시오.

  3. 평소처럼 각 환경에 대해 별도의 게시 프로필을 만듭니다.

  4. PublishProfiles / Development.pubxml을 엽니 다 (이름은 게시 프로필의 이름을 기반으로 함).

  5. PublishProfile 에 태그를 추가 하여 EnvironmentName 변수 를 설정 하기 만하면 appsettings. *. json 파일 명명 규칙이 나머지 작업을 수행합니다.

    <PropertyGroup>
      <EnvironmentName>Development</EnvironmentName>
    </PropertyGroup>

참조 : https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1

“환경 설정”섹션을 참조하십시오.