Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

(시리즈 글이 4개 있습니다.)
개발 환경 구성: 220. supportedRuntime 설정을 위한 app.config Transformation
; https://www.sysnet.pe.kr/2/0/1662

.NET Framework: 1193. (appsettings.json처럼) web.config의 Debug/Release에 따른 설정 적용
; https://www.sysnet.pe.kr/2/0/13028

VS.NET IDE: 200. C# - app.config 파일의 출력을 Configuration(Debug/Release)에 따라 제어하는 방법
; https://www.sysnet.pe.kr/2/0/13918

오류 유형: 980. C# - appsettings.json 파일의 설정값이 적용 안 된다면?
; https://www.sysnet.pe.kr/2/0/14002




C# - appsettings.json 파일의 설정값이 적용 안 된다면?

이상하군요, 분명히 웹 애플리케이션의 배포 경로에는 appsettings.json 파일이 있고, 그 안에 설정값까지 넣어두었습니다.

$ cat appsettings.json
{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information"
        }
    },

    "AllowedHosts": "*",

    "ConnectionStrings": {
        "DBLocal": "...[생략]..."
    }
}

그런데 Microsoft.Extensions.Configuration.IConfiguration.GetConnectionString 메서드에서는 null을 반환합니다. 반면, 비주얼 스튜디오에서 디버깅을 해보면 ^^; 값이 잘 반환됩니다.

검색해 보니까,

Published .Net Core 2 application does not read appsettings.json file
; https://stackoverflow.com/questions/50578013/published-net-core-2-application-does-not-read-appsettings-json-file

Current Directory를 기준으로 찾기 때문이라고 합니다. 그러니까, 아래와 같은 식으로 실행하면 안 되는 것입니다.

// 아래와 같은 경우라면, "/appsettings.json" 경로의 파일을 찾게 되므로 의도한 대로 실행이 안 됨.

$ pwd
/

$ dotnet /app/core3web/Core3Web.dll

대신 이렇게 실행해야 합니다.

// 아래의 경우라면, "/app/core3web/appsettings.json" 경로의 파일을 찾게 되므로 의도한 대로 실행.

$ cd /app/core3web
$ dotnet Core3Web.dll

쉬운 내용이다 보니 너무 쉽게 간과할 수 있던 부분입니다. ^^ 따라서 만약 다른 경로에서 "dotnet /app/core3web/Core3Web.dll"과 같은 식으로 실행하는 것도 허용하고 싶다면 Current Directory를 변경해야 합니다. "Published .Net Core 2 application does not read appsettings.json file" 글의 답변에는 이에 대한 해결책으로 AppContext.BaseDirectory를 이용했다고 하는데 좋은 우회책인 것 같습니다. ^^

namespace Core3Web;

public class Program
{
    public static void Main(string[] args)
    {
        Environment.CurrentDirectory = AppContext.BaseDirectory;
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup();
                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    serverOptions.ListenAnyIP(6001);
                });
            });
}




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/20/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12713정성태7/16/202122132.NET Framework: 1077. C# - 동기 방식이면서 비동기 규약을 따르게 만드는 Task.FromResult파일 다운로드1
12712정성태7/15/202120474개발 환경 구성: 579. Azure - 리눅스 호스팅의 Site Extension 제작 방법
12711정성태7/15/202119219개발 환경 구성: 578. Azure - Java Web App Service를 위한 Site Extension 제작 방법
12710정성태7/15/202124308개발 환경 구성: 577. MQTT - emqx.io 서비스 소개
12709정성태7/14/202119182Linux: 42. 실행 중인 docker 컨테이너에 대한 구동 시점의 docker run 명령어를 확인하는 방법
12708정성태7/14/202124078Linux: 41. 리눅스 환경에서 디스크 용량 부족 시 원인 분석 방법
12707정성태7/14/202189183오류 유형: 734. MySQL - Authentication method 'caching_sha2_password' not supported by any of the available plugins.
12706정성태7/14/202121073.NET Framework: 1076. C# - AsyncLocal 기능을 CallContext만으로 구현하는 방법 [2]파일 다운로드1
12705정성태7/13/202121941VS.NET IDE: 168. x64 DLL 프로젝트의 컨트롤이 Visual Studio의 Designer에서 보이지 않는 문제 - 두 번째 이야기
12704정성태7/12/202119981개발 환경 구성: 576. Azure VM의 서비스를 Azure Web App Service에서만 접근하도록 NSG 설정을 제한하는 방법
12703정성태7/11/202124448개발 환경 구성: 575. Azure VM에 (ICMP) ping을 허용하는 방법
12702정성태7/11/202121878오류 유형: 733. TaskScheduler에 등록된 wacs.exe의 Let's Encrypt 인증서 업데이트 문제
12701정성태7/9/202121875.NET Framework: 1075. C# - ThreadPool의 스레드는 반환 시 ThreadStatic과 AsyncLocal 값이 초기화 될까요?파일 다운로드1
12700정성태7/8/202122180.NET Framework: 1074. RuntimeType의 메모리 누수? [1]
12699정성태7/8/202121193VS.NET IDE: 167. Visual Studio 디버깅 중 GC Heap 상태를 보여주는 "Show Diagnostic Tools" 메뉴 사용법
12698정성태7/7/202124812오류 유형: 732. Windows 11 업데이트 시 3% 또는 0%에서 다운로드가 멈춘 경우
12697정성태7/7/202118727개발 환경 구성: 574. Windows 11 (Insider Preview) 설치하는 방법
12696정성태7/6/202120988VC++: 146. 운영체제의 스레드 문맥 교환(Context Switch)을 유사하게 구현하는 방법파일 다운로드2
12695정성태7/3/202121060VC++: 145. C 언어의 setjmp/longjmp 기능을 Thread Context를 이용해 유사하게 구현하는 방법파일 다운로드1
12694정성태7/2/202122817Java: 24. Azure - Spring Boot 앱을 Java SE(Embedded Web Server)로 호스팅 시 로그 파일 남기는 방법 [1]
12693정성태6/30/202118944오류 유형: 731. Azure Web App Site Extension - Failed to install web app extension [...]. {1}
12692정성태6/30/202120398디버깅 기술: 180. Azure - Web App의 비정상 종료 시 남겨지는 로그 확인
12691정성태6/30/202119796개발 환경 구성: 573. 테스트 용도이지만 테스트에 적합하지 않은 Azure D1 공유(shared) 요금제
12690정성태6/28/202120381Java: 23. Azure - 자바(Java)로 만드는 Web App Service - Tomcat 호스팅
12689정성태6/25/202123797오류 유형: 730. Windows Forms 디자이너 - The class Form1 can be designed, but is not the first class in the file. [1]
12688정성태6/24/202123622.NET Framework: 1073. C# - JSON 역/직렬화 시 리플렉션 손실을 없애는 JsonSrcGen [2]파일 다운로드1
... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...