2011-08-15 4 views
4

ASP.NET, SQL CLR 및 독립 실행 형 응용 프로그램에서 작동하는 코드 라이브러리가 있으며 특정 네임 스페이스 (예 : System.Drawing)를 사용할 수 있는지 여부에 따라 다양한 기능을 제공합니다. 지금, 나는 수동으로 코드의 그 조각을 제외하고있어,하지만 그것을 C# 컴파일러를 가지고 도움이 될 것입니다 :ASP.NET을 탐지하는 지시문이 있습니까?

  • 내가 lazier 수,
  • 내가 하나의 동일한 라이브러리를 사용할 수 있습니다.

은 내가 정의를 검색 #if directives을 사용할 수 있습니다 알고, 내가 수동으로 ASP_NET 같은 것을 정의 할 수 있지만, 자동으로 할 수있는 방법이 있다면, 그것은 더 큰 것.

그래서 ASP.NET을 감지 할 수 있습니까? 또는 특정 참조 된 어셈블리를 사용할 수 있는지 여부를 감지 할 수 있습니까?

+0

왜 이런 식으로하고 싶습니까? ASP.NET에서 System.Drawing을 사용할 수 있습니다. – svick

+0

@svick - Microsoft는 [MSDN] (http://msdn.microsoft.com/en-us/library/system.drawing.aspx)에서 특히 그렇게 말하기 때문에 (주의 사항 참조). 그렇게 말하면서, 나는 그렇게하는 문제에 부딪친 사람을 모른다. – Oded

+0

ASP.NET에서'System.Drawing'을 사용할 수 있다는 것을 알고 있습니다. 예를 들어 SQL CLR에서는 할 수 없습니다. –

답변

9

asp.net에 대한 사전 정의 된 사전 처리기 지정 문이 없습니다.

대부분의 사람들은 현재 HttpContext을 찾습니다. null 인 경우 이는 웹 컨텍스트가 아닙니다.

또 다른 대안은 유사한 가정에 대해 null에 대해 HttpRuntime.AppDomainAppId을 테스트하는 것입니다.

기타 유사한 옵션 :

System.Web.Hosting.HostingEnvironment.IsHosted == true 
System.Web.HttpRuntime.Cache != null 

그리고 당신이 web.config 파일이 존재하는지 확인할 수 있습니다.

+0

WCF에서'HttpContext'가 없습니다. :) – leppie

+0

컴파일 할 때 (또는 스텁 클래스로 코드를 채워야합니다.) 컴파일 할 수 있어야합니다. 그래서 전 처리기에서 뭔가를 기대하고있었습니다. :) –

0

컴파일 타임에 (말한대로)이 작업을 수행해야하는 경우 전처리 기 심볼을 직접 정의 할 수 있습니다.

전처리는 C#만의 개념입니다. 하나를 실행하려는 각 대상에 대해 한 번 컴파일해야합니다. 전처리 기는 런타임에 일어나는 일에는 사용할 수 없습니다. 그 결과는 바이너리에 저장됩니다.

관련 문제