2017-02-02 4 views
0

私はの開発の生産の2つの環境しか持っていません。アプリケーションが相互に実行されているかどうかを知るために次のコードを使用することをお勧めしますか?Debugger.IsAttachedを使用して環境を確定するのは正しいですか?

bool IsProduction() 
{ 
    return !Debugger.IsAttached; 
} 

私はthisthisを読みますが、それは私には思えるの議論は別の方法を取りました。

appSettingsキーの使用はどうですか?

<appSettings> 
    <add key="Environment" value="Dev"/> 
</appSettings> 

誰かが設定ファイルを編集するとどうなりますか?コードに「ダブルチェック」メカニズムが必要ですか?値を暗号化するか、あまりにも多すぎるのでしょうか?

ありがとうございました!

+0

あなたの方法は、「デバッガが、接続されている場合、我々は、生産している」と言ういくつかのリンクを提供することができます設定の変換方法についての詳細情報が必要な場合。あなたは、生産中にのみデバッグする習慣があり、開発中ではありませんか?私はあなたのコードに非常に混乱しています。それだけではこれをしない理由です。 –

+0

より一般的には、*デバッガが接続されているかどうかを確認するために、*ただ一つの*のために "is the debugger attached"メソッドを使うべきです。 –

+0

@EricLippert申し訳ありませんが、私は行方不明でした!オペレーター。 – brugnner

答えて

2

Debugger.IsAttachedは、プロセスにビルドとは独立してアタッチされたデバッガがある(VSで実行されるか、外部デバッガが接続されている)場合にのみtrueを返します。

ビルドタイプに基づいて環境をdiferentiateしたい場合は、ブール値を設定するには、プリプロセッサディレクティブを使用することができ、このような何か:

#if DEBUG 
bool isDebug = true; 
#else 
bool isDebug = false; 
#endif 
+0

これは私にとって最高の解決策でした、ありがとう! – brugnner

+0

また、[条件付き( "DEBUG")]属性([MSDNドキュメント](https://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx))を使用することもできます。 – Brian

0

Debugger.IsAttachedを使用して第1の方法は仕事に行くされていませんデバッガを実際にプロセスにアタッチしていない限り、開発中ですらあります。

設定値は適切なアプローチであり、おそらく私が柔軟性の立場から知っている最高のものです。異なる環境を設定することができ、変換設定ファイルを使用すると、これは自動的にデプロイ時に更新されます。

あなたは私があなたに

関連する問題