これを行うことで、プリプロセッサディレクティブを使用してデバッグ/リリースを確認できることを知っています。
#if DEBUG
//debug mode
#Elif
//release mode
#endif
しかし、テストのような他の構成をチェックすることについてはどうでしょうか。 VBでこれを行うことができます:
#If CONFIG = "Release" Then
'Release mode
#ElseIf CONFIG = "Test" Then
'Test mode
#ElseIf CONFIG = "Debug" Then
'Debug mode
#End If
だから、私の質問はC#で、テストモードを確認するにはどうすればよいですか?デバッグとテストではあるがリリースモードではない場合に実行するコードがいくつかあるので、具体的には、リリースモードでないことを確認する方法が必要です。 VB私はこれを行うでしょう:
#If Not CONFIG = "Release" Then
'Do something here for every configuration that is not Release
#End If
これはデバッグの場合と同じです_TEST
をリストするビルド構成を定義したと仮定「条件付きコンパイルシンボル」テキストボックス(プロジェクトのプロパティ> [ビルド]タブの下。これはスペース区切りのリストです).
TESTビルド構成でのみ実行するコードの場合:
#if TEST
// ...
#endif
そして、TESTビルド構成で実行したくないコードについては、#else
上記、またはこれを行います:
#if !TEST
// ...
#endif
カスタムプリコンパイラディレクティブを使用するプロジェクト[プロジェクト名]の名前を右クリックします。
プロパティアイテムに移動してから、ビルドタブに移動します。
次に、カスタムディレクティブをテキストボックスに追加する必要があります。たとえば、カスタムディレクティブとして「ローカル」を追加しました。下の画像を参照してください
これで、次のように(C#で)新しいコンパイラディレクティブを使用できます。
#if **Local**
//TODO:Add your c# code here
#endif
ファクタリングを処理する方法はいくつかあります。私の世界では、4つの主要な手法を使用しました。
#if
)たとえば、アンマネージコードを含むC#、すべてのマネージコードを含むC#、SilverlightのC#などのビルド構成があります。 C#のアンマネージプロジェクトには、コンパイル時のシンボルUNMANAGED
があり、C#の場合はMANAGED
があり、Silverlightの場合はSILVERLIGHT
があります。これにより、小さなタスクをコードに挿入し、すべてのプロジェクトで同じファイルを共有できます。大きな問題ではない。
部分クラスの場合、フリンジコードの実装を持つプロジェクトごとに個別の.csファイルがあります。これは、ほとんどの実装で抽象クラスを親クラスとして持つことができず、各ターゲットの具体的なクラスでフリンジコードを作成することができなかった場合に使用されます。これは十分に機能します。
個別の実装の場合、コードベース間で共有できるものはほとんどなく、個別のコードを使用するほうがよいことを認めます。これは理想的ではありませんが、そうです。
実行時チェックの場合は、それだけです。 #if
でDEBUG
をチェックするのではなく、ランタイムチェックを使用して設定を選択します。ひどく巨大なデバッグの足場を得ない限り、フィールドデバッグも実行できるため、これは悪い選択ではありません(ただし、配信の制約により、それを防ぐことができます)。
個人的には、コンパイラフラグを回避しようとしています。それらはコードを読みにくくします。しかし正直なところ、それらが意味をなす場合があります。クラス宣言のためにSilverlightでコンパイルできないクラスがあり(使用できないのはObservableCollectionだったと思います)、他のクラスから継承する必要がありました。他はすべてうまくいきました。
簡単な答えは
これで、次のようなDEBUG先行ディレクティブで遊ぶことができます
#if DEBUG
...
#else
...
#endif