우리는 Windows에서 C# 및 .NET 4.0을 사용하여 Visual Studio 2010에서 여러 응용 프로그램을 개발하고 있습니다. 여러 WCF 프로젝트의 서비스를 사용하는 두 개의 SilverLight 응용 프로그램. 다른 하나는 콘솔 응용 프로그램입니다.C# Library Code가 System.Web.dll없이 응용 프로그램 유형을 호스팅하는 것을 어떻게 알 수 있습니까?
코드를 인수 분해하고 재사용하기 위해 분리 된 라이브러리 프로젝트에 "공통"기능을 추가하려고합니다. 이 라이브러리는 WCF 서비스처럼 응용 프로그램 (IIS, ASP.NET ...)이 호스팅되는지 또는 다른 파일 경로 처리로 인해 콘솔 응용 프로그램으로 실행되는지를 알아야합니다.
이 질문을하는 사람들은 HttpContext, HostingEnvironment.IsHosted를 사용하여 코드가 호스팅되는지를 알기 위해 System.Web.dll을 사용함을 나타냅니다. 문제는 이러한 접근 방식이 시스템에 대한 참조를 포함해야한다는 것입니다 .Web int이 라이브러리가 클라이언트 프로파일이있는 콘솔 프로젝트에서 참조되는 경우 허용되지 않습니다.
아이디어는 System.Web 어셈블리를 사용하지 않는 다른 기술을 사용하는 것입니다.
"다른 파일 경로 처리로 인한 것"- 파일 경로 처리가 ASP.NET과 콘솔 응용 프로그램간에 다를 필요는 없습니다. 왜 필요하다고 생각하는지 정확하게 설명하면 누군가가 호스팅 앱에 대해 알 필요가있는 클래스 라이브러리를 피할 수있는 솔루션을 게시 할 수 있습니다. – Joe
라이브러리가 호스트 된 경우, 라이브러리/애플리케이션과 같은 폴더에있는 파일의 경로를 얻기 위해 가상 경로를 실제 경로에 매핑하려면'HostingEnvironment.MapPath ("~ /"+ fileName)'이 필요합니다 ; 콘솔 응용 프로그램을 실행할 때 'filename'을 상대 경로로 사용하십시오. –
내 대답보기, 당신은 AppDomain.BaseDirectory를 사용하여 응용 프로그램 폴더를 얻을 수 있습니다. – Joe