2013-05-28 13 views
6

私は、インターフェイスを持っています。ILocateLogFileと呼んで、開発者向けの標準実装である/プロダクションサーバと、ローカル開発環境でのみ動作します。私は、(私はローカルまたはサーバー上で実行している場合、私は良いコンパイル時に決定するための素敵な方法を考えることができないが、ランタイムはうまくいくだろう)。 IIS上でホストされているWCFアプリケーションです(重要な場合)。コードがVisual Studio/Cassiniからローカルで実行されているかどうかを確認する方法

私が思い付くした最高のは、コンパイラの記号を使用するようなものです:問題がある

ILocateLogFile locateLogFile; 
#if DEBUG 
    locateLogFile = new DevSandboxLogFileLocator(); 
#else 
    locateLogFile = new LogFileLocator(); 
#endif 

、シンボルは私が管理していないビルドで設定を取得、コンパイル、およびI確信したいVisual Studioの存在を確認するための自動化された方法はありませんか?または、少なくともIISではなくCassiniを確認する必要がありますか?私はこの1を行っている

+0

を使用したコードである私は、これがあればelse文でサーバ名の変数をチェックして前に解決を見てきました。 – RandomUs1r

+1

ログを構成するために.configファイルを使用しない理由は何ですか? (すでに環境ごとに異なる.configがあるので、ログを追加するのは簡単かもしれません)。 –

+0

@ RandomUs1rそれは良い提案ですが、私のWCFサービスがASP.Netとの互換性を使用していないため、 'System.Web.HttpContext'を使うことはできません。 – McGarnagle

答えて

8

二つの方法あなたは、プロセス名

bool isRunningInIisExpress = Process.GetCurrentProcess() 
           .ProcessName.ToLower().Contains("iisexpress"); 

を確認するか、あなたはそれぞれの環境のために特別にアップデートすることを

<appSettings> 
    <add key="ApplicationEnvironment" value="LOCAL_DEV" /> 
</appSettings> 

カスタムセッティングを使用して設定ファイルを更新し、あなたが持つことができます

のアプリケーションクエリ

コンパイル時にこれを判別する方法があるかどうかはわかりませんが、各envi専用のビルド設定これらのビルドごとにカスタムPRAGMAを入れてください。個人的に私はそれがエレガントではないと思うが、それはまた働くことができる。ここで

+0

おかげさまで、私は最初の選択肢がまさに私が探しているものだと思う - しかし、私のプロセス名は "iisexpress"ではなく "WebDev.WebServer40"と思われる。 – McGarnagle

+0

開発サーバーでビルドを使用している場合は意味があります。 IIS Expressに切り替えることについて考えてみてください。私はそれがより堅牢で、VS 2012/2010 SP1に組み込まれていることを発見しました。 – jstromwick

-2

は私が

If Debugger.IsAttached Then 
' Since there is a debugger attached, 
' assume we are running from the IDE 
Else 
' Assume we aren't running from the IDE 
End If 
関連する問題