.NET 5에서 게시하기 위한 환경 기반 appsettings.json 구성

6689 단어 startupdotnet

소개



때로는 하나의 애플리케이션을 여러 사이트에 게시하려고 합니다. .NET의 애플리케이션에 대한 연결 문자열은 일반적으로 appsettings.json에 있습니다. 릴리스 버전 제어가 이러한 여러 애플리케이션에 대해 동일하고 클라이언트당 하나의 appsettings.*.json을 구성하려는 경우 빠른 솔루션은 각 클라이언트에 대한 appsettings 파일을 만드는 것입니다.

구성



열기 시작하려면 program.cs 파일에 구성하려는 각 클라이언트에 대한 appsettings가 포함되어 있습니다. 이 설정은 appsettings.json을 로드합니다.

public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args);

            host
                .ConfigureAppConfiguration((hostContext, config) =>
                {
                    config.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
                    config.AddJsonFile("appsettings.json", optional: true, false);
                    config.AddJsonFile("appsettings.client1.json", optional: true);                    
                    config.AddEnvironmentVariables();
                });

            return host;
        }


지정된 json 파일도 애플리케이션에 로컬로 존재하는지 확인하십시오.



구성 관리자



애플리케이션을 게시할 때 각 클라이언트에 대해 고려할 구성을 선택할 수 있도록 구성 관리자를 설정합니다.



빌드 > 구성 관리자를 클릭합니다.

새 구성을 설정합니다. 기본적으로 디버그 및 릴리스를 사용할 수 있습니다. 이 예에서는 client1 구성을 만들었습니다.



CSPROJ 설정



마지막으로 각 환경에 맞는 appsettings.*.json을 구성하려면 CSPROJ 파일을 엽니다.



이 예에서는 appsettings.client1.json을 Client1이라는 구성에 게시하도록 환경을 구성합니다. 그렇지 않으면(다른 환경의 경우) appsettings.json이 고려됩니다.

 <Choose>
    <When Condition="'$(Configuration)' == 'Client1'">
      <ItemGroup>
        <None Include="appsettings.client1.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
        <None Include="appsettings.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
        <Content Remove="appsettings.*.json;appsettings.json" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <None Include="appsettings.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
        <None Include="appsettings.client1.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
      </ItemGroup>
    </Otherwise>
  </Choose>


테스트



이 구성을 테스트하기 위해 Client1 구성 및 릴리스 구성과 함께 애플리케이션을 게시하여 각 환경에 올바른 설정이 적용되었는지 확인했습니다.

게시된 프로젝트 구성을 올바른 구성으로 설정해야 합니다.



이 애플리케이션을 게시한 후에는 appsettings.client1.json이 사용 가능한 유일한 설정 파일이어야 합니다.

마지막 생각들



이 유형의 구성은 대규모 프로덕션 환경에 가장 적합한 접근 방식이 아닐 수 있지만 스테이징 또는 소규모 팀 프로젝트를 위해 서버에서 잘못된 appsettings 구성을 방지합니다.

좋은 웹페이지 즐겨찾기