42

これを行うことで、プリプロセッサディレクティブを使用してデバッグ/リリースをチェックできることを知っています。

#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
4

4 に答える 4

74

[条件付きコンパイルシンボル]テキストボックス([プロジェクトのプロパティ]> [ビルド]タブ。これはスペースで区切られたリスト)にリストするビルド構成を定義したと仮定するとTEST、DEBUGの場合と同じです。

TESTビルド構成でのみ実行するコードの場合:

#if TEST
// ...
#endif

また、TESTビルド構成で実行したくないコードについては#else、上記のいずれかを実行するか、次のようにすることができます。

#if !TEST
// ...
#endif
于 2012-12-21T13:23:45.280 に答える
12

カスタムプリコンパイラディレクティブを使用するプロジェクト[プロジェクト名]名を右クリックします。

プロパティ項目に移動し、次にビルドタブに移動します。

次に、テキストボックスにカスタムディレクティブを追加する必要があります。たとえば、カスタムディレクティブとして「ローカル」を追加しました。下の画像を参照してください

ここに画像の説明を入力してください

これで、(C#で)以下に示すように、新しいコンパイラディレクティブを使用できます。

  #if **Local**
    //TODO:Add your c# code here
  #endif
于 2015-03-25T01:37:12.500 に答える
4

ファクタリングを処理する方法はいくつかあります。私の世界では、4つの主要な手法を使用しました。

  1. コンパイラフラグ(#if
  2. 部分クラス
  3. 個別の実装
  4. 実行時の決定

たとえば、アンマネージコードを使用したC#、すべてのマネージコードを使用したC#、Silverlight用のC#のビルド構成があります。C#の管理されていないプロジェクトには、コンパイル時のシンボルがありますUNMANAGED。C#MANAGEDの場合は、Silverlightの場合はSILVERLIGHTです。これにより、小さなタスクをコードに挿入し、すべてのプロジェクトで同じファイルを共有できます。大きな問題ではない。

部分クラスの場合、フリンジコードの実装があるプロジェクトごとに個別の.csファイルがあります。これは、ほとんどの実装で親クラスとして抽象クラスを使用し、次に各ターゲットの具象クラスにフリンジコードを使用することで、これを機能させることができなかった場合に使用されます。これで十分に機能します。

個別の実装の場合、コードベース間で共有できるものはほとんどないことを認識しており、個別のコードを使用することをお勧めします。これは理想的ではありませんが、そうです。

ランタイムチェックの場合、それはまさにそれです。DEBUGをチェックインするのではなく#if、設定のランタイムチェックを使用してその選択を行います。非常に巨大なデバッグスキャフォールドを持っていない限り、これはフィールドデバッグも実行できるため、悪い選択ではありません(ただし、配信の制約によりそれが妨げられる場合があります)。

個人的には、コンパイラフラグを避けようとしています。それらはコードを読みにくくします。正直なところ、しかし、それらが理にかなっている場合があります。クラス宣言のためにSilverlightでコンパイルされないクラスがあり(使用できなかったのはObservableCollectionだったと思います)、他のものから継承する必要がありました。他のすべてはうまくいきました。

于 2012-12-21T13:45:07.077 に答える
2

簡単な答えは

  • [プロジェクト]->[プロジェクト名][プロパティ]->[ビルド]に移動します
  • チェックを設定[]DEBUGを定義

これで、次のようなDEBUGの先行ディレクティブで遊ぶことができます。

#if DEBUG
...
#else
...
#endif
于 2014-03-30T09:13:26.507 に答える