Closed alkee-allm closed 4 years ago
reference 에서는
private static string GetBasePath()
{
var isDevelopment = ASPNETCORE_ENVIRONMENT == Environments.Development;
if (isDevelopment) return System.IO.Directory.GetCurrentDirectory(); // 개발환경
// stage or production
using var processModule = System.Diagnostics.Process.GetCurrentProcess().MainModule;
return System.IO.Path.GetDirectoryName(processModule?.FileName);
}
와 같은 경로를 사용하도록 하는데, 개발환경(visual studio 사용)의 경우에 GetCurrentDirectory
를 사용하는 이유가 명확하지 않다. appsettings.json
파일은 output directory 에 복사되도록 설정되어있기 때문에 필요 없어 보이는데...
그렇다고, 항상 process path 를 사용하는 방법은 합리적일까?
private static string CurrentProcessPath
=> System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName);
multi instance 테스트를 위해서 서로다른 publish 된 중복 파일을 넣는 것 보다, 하나의 공유된 경로에 binary 를 두고, working directory 에서 이곳에 log 나 appsettings
처리를 하는것이 가능하다면 좋을텐데..
appsettings
를 CurrentProcessPath
와 WorkingDirectory
두군데에서 찾고 양쪽에 있는 경우 exception(비직관적인 순서로 인한 실수 방지), 한쪽에만 있는경우 이를 이용하도록 하는 방법이라면?
appsettings.json
의 출력 디렉터리로 복사
속성 때문에, Visual studio 에서 working(project) directory 와 output directory 에 모두 존재하게되어 문제가 예상된다. 그렇다고 출력 디렉터리로 복사를 하지 않게되면 배포시에 이 파일이 빠지게 되니 이 또한 문제가 있을 것인데...
따라서, Main 에서 로깅을 이용해 중복된 파일이 감지되는 경우 Warning 하고, working directory 의 appsettings.json
을 사용하도록(개발 환경 우선) 하는 방식을 사용하는 아이디어.
Main 에서, HostBuilder 를 생성하기 전에 logging 이 필요한 경우 LoggerFactory 를 이용해 직접 개체를 생성하고 provider 를 설정한 후 logging 해야한다.
단일 파일 배포를 사용해
k2svc.exe
를 실행(publish
directory)했을 때,와 같은 exception(crash) 발생
참고