2011-08-15 6 views
4

私はASP.NET、SQL CLR、およびスタンドアロンアプリケーションで動作するコードライブラリを用意しており、特定の名前空間(System.Drawingなど)が使用可能かどうかに基づいてさまざまな機能を提供しています。今、私は手動でコードのこれらの部分を除いたんだけど、それにC#コンパイラを持っていることは有益であろう:ASP.NETを検出するディレクティブはありますか?

  • 私は1と同じライブラリを使用することができ
  • 、lazierである可能性があります。

私は定義を検索するために#if directivesを使用することができ、私は手動でASP_NETのようなものを定義することもできますが、これを自動的に行う方法がありますならば、それはさらに大きくなるだろう知っています。

ASP.NETを検出できますか?あるいは、特定の参照アセンブリが利用可能かどうかを検出できますか?

+0

なぜこのようにしたいのですか?あなたは確かにASP.NETから 'System.Drawing'を使うことができます。 – svick

+0

@svick - マイクロソフトでは[MSDN](http://msdn.microsoft.com/en-us/library/system.drawing.aspx)について特に言及しているため(注意のセクションを参照)それを言って、私はそうする問題に遭った誰も知らない。 – Oded

+0

ASP.NETで 'System.Drawing'を使うことができます。たとえば、SQL CLRではできません。 –

答えて

9

asp.net用に事前定義されたプリプロセッサ指令はありません。

ほとんどの人は、現在のHttpContextを探しています - これがnullの場合、これはWebコンテキストではないという前提です。

もう1つの代替方法は、同様の前提でヌルに対してHttpRuntime.AppDomainAppIdをテストすることです。

その他の同様のオプション:

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

そして、あなたはweb.configファイルが存在することを確認することができます。

+0

WCFの 'HttpContext'はありません: – leppie

+0

私はコンパイル時にこれをやり直さなければなりません(またはスタブクラスで自分のコードを埋めてください)、コンパイルできるようになります。そのためプリプロセッサで何かを期待していました。 :) –

0

コンパイル時にこれを行う必要がある場合(あなたが言ったように)、プリプロセッサシンボルを自分で定義することができます。

前処理はC#単なる概念です。実行するターゲットごとにコンパイルする必要があります。プリプロセッサは、実行時に発生するものには使用できません。結果はバイナリに書き込まれます。

関連する問題