web-dev-qa-db-ja.com

#if DEBUG以外のディレクティブのプリプロセッサディレクティブ

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

#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
35
Johnie Karr

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

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

#if TEST
// ...
#endif

そして、TESTビルド構成で実行したくないコードについては、#else上記、またはこれを行います:

#if !TEST
// ...
#endif
61
Joe White

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

プロパティアイテムに移動してから、ビルドタブに移動します。

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

enter image description here

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

  #if **Local**
    //TODO:Add your c# code here
  #endif
7
Ram

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

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

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

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

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

実行時チェックの場合は、それだけです。 #ifDEBUGをチェックするのではなく、ランタイムチェックを使用して設定を選択します。ひどく巨大なデバッグの足場を得ない限り、フィールドデバッグも実行できるため、これは悪い選択ではありません(ただし、配信の制約により、それを防ぐことができます)。

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

4
plinth

簡単な答えは

  • Project-> [Project name] Properties-> Buildに移動します
  • チェック済みを設定[]デバッグを定義

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

#if DEBUG
...
#else
...
#endif
1
user3477720