-
[.NET] AppContext.BaseDirectory 와 Environment.CurrentDirectory 위치 차이점 및 유의사항.NET/개념 및 유용한 팁 2021. 2. 1. 18:45반응형
닷넷으로 개발하는 사람들중에서 현재 프로그램이 실행되는 위치를 가져와야하는 경우가 발생할 수 있다. 그럴때 AppContext.BaseDirectory 또는 Environment.CurrentDirectory를 사용하게 될 것이다.
간단한 Console 프로젝트를 만든 뒤, 해당 소스처럼 작성하고 디버깅해보자. 이름은 ConsoleApp1 이라고 지었다.
class Program { static void Main(string[] args) { Console.WriteLine("Console App1"); Console.WriteLine(AppContext.BaseDirectory); Console.WriteLine(Environment.CurrentDirectory); } }
실행결과 실제 실행결과는 스크린샷과 다르겠지만 AppContext.BaseDirectory와 Environment.CurrentDirectory 모두 동일한 결과가 나올 것이다. 그런데 이 둘은 엄연히 다르다.
https://docs.microsoft.com/ko-kr/dotnet/api/system.appcontext.basedirectory?view=net-5.0
AppContext.BaseDirectory 속성 (System)
어셈블리 확인자에서 어셈블리를 조사하는 데 사용하는 기본 디렉터리의 파일 경로를 가져옵니다.Gets the file path of the base directory that the assembly resolver uses to probe for assemblies.
docs.microsoft.com
https://docs.microsoft.com/ko-kr/dotnet/api/system.environment.currentdirectory?view=net-5.0
Environment.CurrentDirectory 속성 (System)
현재 작업 디렉터리의 정규화된 경로를 가져오거나 설정합니다.Gets or sets the fully qualified path of the current working directory.
docs.microsoft.com
한글설명이 명확하지 않은데 간단하게 설명하면 AppContext.BaseDirectory는 "프로그램 파일의 위치" 이고, Environment.CurrentDirectory는 "프로그램을 실행시킨 위치"이다. 빌드된 파일을 cmd 나 마우스로 직접 선택하여 실행시킨다면, "프로그램 파일 위치" == "프로그램을 실행시킨 위치" 가 되므로 차이가 없다.
그러나 해당 프로그램을 다른 프로그램을 통해 찾아가서 실행시키거나, cmd나 shell에서 경로까지 포함시켜 실행하는 경우 얘기는 달라진다.
두번째 프로젝트를 생성하고 아래와 같이 소스를 작성해보자. 첫번째 콘솔 프로그램의 위치를 찾아가서 실행시키는 소스이다. Process.Start 함수 내 프로그램 위치경로는 자신의 환경에 맞춰 바꿔야 한다. 이름은 ConsoleApp2 라고 지었다.
class Program { static void Main(string[] args) { Console.WriteLine("Console App2"); Process.Start("C:\\Users\\ddochea\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\netcoreapp3.1\\ConsoleApp1.exe"); // 자신의 개발환경에 따라 변경 필요 } } }
실행결과 콘솔창 가장 첫번째 줄인 Console App2 부분을 제외하곤 첫번째 프로그램의 실행결과이다. 같은 솔루션폴더에 위치한 프로젝트이다보니 경로가 꽤 동일하지만 분명 직접 실행시킬때 와 차이가 있음을 알 수 있다.
AppContext.BaseDirectory는 프로그램 자기 자신의 위치를 표시한 반면, Environment.CurrentDirectory는 Console2의 위치이다.
경로까지 직접 입력하여 실행할때도 차이점을 확인할 수 있다.
이 차이점은 .NET Framework, .NET Core, .NET5 이상 모두 공통적인 특징이므로 유의해야한다.
반응형'.NET > 개념 및 유용한 팁' 카테고리의 다른 글