2009-11-11 3 views
2

Windows 응용 프로그램과 asp.net 응용 프로그램 모두에서 응용 프로그램 경로 (실제)를 얻으려면 .NET에서 통일 된 방법이 있습니까 ??균일 한 방법으로 Windows 응용 프로그램과 asp.net 응용 프로그램 모두에 대한 응용 프로그램 경로를 얻으십시오.

+0

, 당신이 또는 당신이 누군가가 형태 나에게 코드의 조각을 줄 수 "뜻"당신에게 대답을 줄 것이다 하나의 방법 또는 기존의 .NET 런타임에서 유사한 "을 의미합니까 컨텍스트에 관계없이 항상 올바른 경로를 생성 할 수있는 방법을 제공 할 것입니다. " –

+0

예, 당신은 그것을 지적했습니다, 나는 단일 방법 또는 속성을 의미합니다. 내가 어떤 컨텍스트인지 알기 위해 코드를 작성하고 싶지 않습니다. –

답변

2

정확히 무엇을 찾고 있는지 알 수는 없지만 AppDomain.CurrentDomain.BaseDirectory이 후보가 될 수 있습니다.

업데이트
@AZ가 지적한 바와 같이, 케이스는 내가 아니, 통일 된 방법이 없다고 말할 것입니다 그래서 결국이, 당신은 "응용 프로그램 디렉토리"를 고려 일반적 될지 반환하지 않습니다 때 거기에 그 안전하게 당신에게 기대하는 것을 줄 것입니다.

+0

그냥 확인하고 있었는데 실제로 필요한 것입니다 – Zenuka

+0

Windows 서비스를 개발중인 경우 속성은 c : \ windows \ service32는 svchost.exe에 의해 호스팅되기 때문에 system32입니다. 모든 경우에 작동하지는 않습니다. –

+0

@AZ : 아니요, 완벽한 해결책은 아닙니다. 응용 프로그램이로드되는 위치가 아닌 다른 디렉토리가'BaseDirectory '가되도록 AppDomain이 응용 프로그램에서 실행되는 경우도있을 수 있습니다. –

0

Assembly.GetExecutingAssembly(). 위치. 항상 실행중인 dll 또는 exe의 경로를 가져옵니다 (웹 응용 프로그램의 bin 폴더에 있음). 그러면 응용 프로그램 디렉토리를 추론 할 수 있습니다.

+0

IIS에서 실행중인 aspx 페이지에서 이렇게하면 다음과 같은 내용이 나타납니다. c : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ [...] \ theassemblycontainingyourfile.dll ', 당신이 바라는 것이 아닐 수도 있습니다. 나는 정말로 원래의 질문에 대한 대답은 "똑같은 방법이 없다"라고 생각합니다. 내 대답은 또한 결점을 포함하고 있습니다 (당신이 지적한대로). –

+0

나는 Fredrik도 그렇게 생각하기 시작했다. 고마워. –

+0

@Fredrik - 맞아. 웹 사이트 (동적으로 컴파일 된)가 있고 응용 프로그램이 아닌 경우를 테스트하지 않았습니다. 가능한 경우 프로젝트를 웹 응용 프로그램으로 변경하면 ASP가 웹 사이트에서 수행하는 임시 어셈블리 생성이 중지됩니다. 그렇다면 일관성이 있습니다 –

1

[bin \ folder를 의미한다고 가정합니다] 이것은 내가하는 방법입니다 그것.

환경은 일반적으로 윈도우 응용 프로그램 및 Asp.Net 경우, 당신이해야합니다 AppDomain.CurrentDomain.SetupInformation.PrivateBinPath가 비어 있거나 null가 아닌 경우

  • 확인이 확인합니다.
    • 하지 않으면, 그것은 뿌리를두고 있는지 확인 여부를
      • 가없는 경우, BinPath이 값을 기억 (이것은 Asp.Net에서 '빈 \'을 수 있습니다) -하지만 조심 더 많은 사용자 지정 AppDomain 호스팅 환경에서 여기에 경로가 두 개 이상있을 수 있으며 의 루트 경로를 가질 수 있습니다. 그런 다음

, 하나

  • 그것은 (BinPath는 이전부터 기억됩니다) AppDomain.CurrentDomain.BaseDirectory
  • 또는 Path.Combine(AppDomain.CurrentDomain.BaseDirectory, BinPath)을합니다.

단위 테스트를위한 임시 도메인을 호스팅하는 테스트 주자 및 기타 이상한 것들이 포함 된 다른 고급 시나리오가 있습니다. Asp.Net에는 또한이 답변의 다른 곳에서 언급 된 동적 폴더가 있습니다. bin 폴더에 안정적으로 접근하려는 경우 빨간색 청어입니다.

동적으로 생성되며 해당 동적 폴더에 상주하는 Asp.Net 사이트에서 사용하기 때문에 진입 어셈블리의 경로를 사용할 수 없습니다.

동일하게 - 고려해야 할 Sql Server 호스트 도메인과 같은 것들이 있습니다.이 경우 볼 게임이 다시 변경됩니다 (이 경우 MSSQL Server 폴더가 있음).

모든 AppDomain에 대해이를 안정적으로 판단 할 수있는 솔루션은 실제 시행 착오에 의해 가장 잘 만들어 질 것입니다. 저는 모든 호스팅 시나리오에 대해 완벽한 답변을 제시 할 때까지 아쉽습니다! 그래서 가장 일반적인 것들을 고수하십시오.

0

단위 테스트 어셈블리 및 ASP에서 실행되는 프레임 워크 구성 요소를 작성 중이므로 동일한 질문이있었습니다.NET 웹 사이트.

모든 조합을 테스트하지는 않았지만 CodeRush 플러그인을 사용하여 단위 테스트를 실행하는 동안 IIS Express 7.5 및 Visual Studio에서 다음 코드를 테스트했지만 정상적으로 작동했습니다.

나는이 길에 나를 넣어의 MSDN 문서 이전 섹션으로 신용을주지 :

http://msdn.microsoft.com/en-us/library/aa457089.aspx#howtoexecutingapppath_topic3 어쨌든,이 코드입니다. 희망이 도움이 : 균일하여

string binPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
string appPath = binPath.Substring(0, binPath.LastIndexOf("bin", StringComparison.InvariantCultureIgnoreCase)); 
관련 문제