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

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

비밀번호

댓글 작성자
 




... 61  [62]  63  64  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12470정성태12/30/202021656.NET Framework: 991. .NET 5 응용 프로그램에서 WinRT API 호출 [1]파일 다운로드1
12469정성태12/30/202025795.NET Framework: 990. C# - SendInput Win32 API를 이용한 가상 키보드/마우스 [1]파일 다운로드1
12468정성태12/30/202023218Windows: 186. CMD Shell의 "Defaults"와 "Properties"에서 폰트 정보가 다른 문제 [1]
12467정성태12/29/202023201.NET Framework: 989. HttpContextAccessor를 통해 이해하는 AsyncLocal<T> [1]파일 다운로드1
12466정성태12/29/202020415.NET Framework: 988. C# - 지연 실행이 꼭 필요한 상황이 아니라면 singleton 패턴에서 DCLP보다는 static 초기화를 권장 [1]파일 다운로드1
12465정성태12/29/202023992.NET Framework: 987. .NET Profiler - FunctionID와 연관된 ClassID를 구할 수 없는 문제
12464정성태12/29/202020893.NET Framework: 986. pptfont.exe - PPT 파일에 숨겨진 폰트 설정을 일괄 삭제
12463정성태12/29/202019818개발 환경 구성: 520. RDP(mstsc.exe)의 다중 모니터 옵션 /multimon, /span
12462정성태12/27/202023343디버깅 기술: 177. windbg - (ASP.NET 환경에서 유용한) netext 확장
12461정성태12/21/202022365.NET Framework: 985. .NET 코드 리뷰 팁 [3]
12460정성태12/18/202020121기타: 78. 도서 소개 - C#으로 배우는 암호학
12459정성태12/16/202021825Linux: 35. C# - 리눅스 환경에서 클라이언트 소켓의 ephemeral port 재사용파일 다운로드1
12458정성태12/16/202018745오류 유형: 694. C# - Task.Start 메서드 호출 시 "System.InvalidOperationException: 'Start may not be called on a task that has completed.'" 예외 발생 [1]
12457정성태12/15/202020588Windows: 185. C# - Windows 10/2019부터 추가된 SIO_TCP_INFO파일 다운로드1
12456정성태12/15/202021852VS.NET IDE: 156. Visual Studio - "Migrate packages.config to PackageReference"
12455정성태12/15/202021341오류 유형: 693. DLL 로딩 시 0x800704ec - This Program is Blocked by Group Policy [1]
12454정성태12/15/202021548Windows: 184. Windows - AppLocker의 "DLL Rules"를 이용해 임의 경로에 설치한 DLL의 로딩을 막는 방법 [1]
12453정성태12/14/202022815.NET Framework: 984. C# - bool / BOOL / VARIANT_BOOL에 대한 Interop [1]파일 다운로드1
12452정성태12/14/202023202Windows: 183. 설정은 가능하지만 구할 수는 없는 TcpTimedWaitDelay 값
12451정성태12/14/202019901Windows: 182. WMI Namespace를 열거하고, 그 안에 정의된 클래스를 열거하는 방법 [5]
12450정성태12/13/202021459.NET Framework: 983. C# - TIME_WAIT과 ephemeral port 재사용파일 다운로드1
12449정성태12/11/202022494.NET Framework: 982. C# - HttpClient에서의 ephemeral port 재사용 [2]파일 다운로드1
12448정성태12/11/202024305.NET Framework: 981. C# - HttpWebRequest, WebClient와 ephemeral port 재사용파일 다운로드1
12447정성태12/10/202022537.NET Framework: 980. C# - CopyFileEx API 사용 예제 코드파일 다운로드1
12446정성태12/10/202023877.NET Framework: 979. C# - CoCreateInstanceEx 사용 예제 코드파일 다운로드1
12445정성태12/8/202017681오류 유형: 692. C# Marshal.PtrToStructure - The structure must not be a value class.파일 다운로드1
... 61  [62]  63  64  65  66  67  68  69  70  71  72  73  74  75  ...