[c#] AppDomain.CurrentDomain.BaseDirectory 또는 System.Environment.CurrentDirectory를 사용해야합니까?

동일한 폴더에 두 개의 exe 파일이 있으며 exe1의 버튼에서 exe2를 실행할 수 있습니다. 오늘 나는 원격 (터미널 서비스) 세션을 통해 고객을 관찰하고 있었고 exe2는 ‘파일을 찾을 수 없음’오류를 실행하지 못했지만 exe1은 확인했을 때 동일한 디렉토리에있었습니다. 그래서 AppDomain.CurrentDomain.BaseDirectory 또는 System.Environment.CurrentDirectory 를 사용해야 합니까?

감사



답변

응용 프로그램과 같은 디렉토리에서 파일을 찾으려면 AppDomain.CurrentDomain.BaseDirectory올바른 선택입니다.

Environment.CurrentDirectory응용 프로그램 실행 과정에서 변경 될 수있는 값입니다. 예를 들어, 기본 매개 변수를 사용하여 WinForms의 OpenFileDialog는이 값을 파일이 선택된 디렉토리로 변경합니다.


답변

AppDomain.CurrentDomain.BaseDirectory현재 애플리케이션 도메인이로드 된 디렉토리를 반환합니다.
System.Environment.CurrentDirectory현재 시스템 디렉토리를 반환합니다.
귀하의 경우 AppDomain.CurrentDomain.BaseDirectory에는 최상의 솔루션입니다.


답변

당신은 사용해야합니다 AppDomain.CurrentDomain.BaseDirectory.

예를 들어 Windows 서비스 애플리케이션에서 :

System.Environment.CurrentDirectoryC : \ Windows \ system32를 반환합니다 .

동안

AppDomain.CurrentDomain.BaseDirectory [Application.exe 위치]를 반환합니다.

주목해야 할 또 다른 중요한 요소 AppDomain.CurrentDomain.BaseDirectory는 읽기 전용 속성이지만 Environment.CurrentDirectory필요한 경우 다른 속성이 될 수 있다는 것입니다.

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;


답변

내가 이해했듯이 BaseDirectory. CurrentDirectory프로그램 실행 과정에서 변경 될 수 있습니다.


답변

Visual Studio 2010 테스트 프로젝트에서 테스트 설정 편집의 배포 옵션을 활성화하면 AppDomain.CurrentDomain.BaseDirectory가 TestResults \ Out 폴더 (bin \ debug가 아님)를 가리 킵니다. 그러나 기본 설정은 bin \ debug 폴더를 가리 킵니다.

여기에서 설득력있는 답을 찾았습니다.

AppDomain.CurrentDomain.BaseDirectory가 asp.net 앱에 “bin”을 포함하지 않는 이유는 무엇입니까?


답변

나는 보통 다음과 같은 것을 사용합니다.

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");


답변

나는 또한 내가 사용하는 동안이 며칠을 겪었습니다.

Environment.CurrentDirectory

프로덕션 서버에서 문제가 발생했지만 로컬 서버에서 잘 작동했기 때문에

그래서 나는

System.AppDomain.CurrentDomain.BaseDirectory;

그리고 그것은 두 환경 모두에서 저에게 효과적이었습니다.

그래서 그들 모두가 말했듯이 우리는 항상

System.AppDomain.CurrentDomain.BaseDirectory;

현재 도메인 디렉토리에서 경로를 확인합니다.

더 많은 정보를 찾으십시오

서버에서 경로 오류의 일부를 찾을 수 없습니다.