Web上のAPIにアクセスするコードがいくつかあります。 APIのパラメーターの1つを使用して、テスト中であることをユーザーに知らせることができます。
私がテストしているときだけ、コードにこのパラメーターを設定したいと思います。現在、私はリリースビルドを実行するときにコードをコメント化しています。
ビルド構成に基づいてこれを自動的に行う方法はありますか?
次のいずれかを使用できます。
Conditional
属性Conditional
属性は、指定された条件付きコンパイルシンボルが定義されていない限り、メソッド呼び出しまたは属性を無視する必要があることをコンパイラーに示します。
コード例:
[Conditional("DEBUG")]
static void Method() { }
#if
プリプロセッサディレクティブC#コンパイラが #if
プリプロセッサディレクティブ に遭遇すると、最終的に#endifディレクティブが続き、指定されたシンボルが定義されている場合にのみ、ディレクティブ間のコードをコンパイルします。 。 CおよびC++とは異なり、シンボルに数値を割り当てることはできません。 C#の#ifステートメントはブール値であり、シンボルが定義されているかどうかのみをテストします。
コード例:
#if DEBUG
static int testCounter = 0;
#endif
Debug.Write
メソッドDebug.Write
(および Debug.WriteLine
)は、デバッグに関する情報を Listeners コレクションのトレースリスナーに書き込みます。
Debug.WriteIf
および Debug.WriteLineIf
も参照してください。
コード例:
Debug.Write("Something to write in Output window.");
#if
ディレクティブは、デバッグ以外のリリース(リリースなど)ビルドで意図しない状況を引き起こす可能性があるため、使用には注意してください。たとえば、次を参照してください。
string sth = null;
#if DEBUG
sth = "oh, hi!";
#endif
Console.WriteLine(sth);
この場合、非デバッグビルドは空白のメッセージを出力します。しかし、これは別のケースでNullReferenceException
を発生させる可能性があります。
外部アプリケーションからデバッグ情報を取得できるツール DebugView もあります。
はい、コードをラップします
#if DEBUG
// do debug only stuff
#else
// do non DEBUG stuff
#endif
Google for "C#コンパイルシンボル"
デバッグ構成では、Visual Studioが自動的にDEBUG
を定義します。必要なシンボルを定義できます(プロジェクトのプロパティ、[ビルド]タブを見てください)。プリプロセッサディレクティブを悪用することは悪い考えであることに注意してください。コードの読み取りや保守が非常に困難になる可能性があります。
私はこれと同じ問題を抱えていて、私が行った解決策は次のものを使用しています:
if (System.Diagnostics.Debugger.IsAttached)
{
// Code here
}
つまり、技術的には本番環境でデバッガを接続して、そのコードを実行することができます。
#if #endifディレクティブに加えて、条件付き属性も使用できます。属性でメソッドをマークした場合
[Conditional("Debug")]
アプリケーションがデバッグモードでビルドされている場合にのみ、コンパイルおよび実行されます。以下のコメントで述べたように、これらはメソッドにvoid戻り型がある場合にのみ機能します。
同様の結果を持つ別の投稿があります: http://www.bigresource.com/Tracker/Track-vb-lwDKSoETwZ/
より良い説明は次の場所にあります: http://msdn.Microsoft.com/en-us/library/4y6tbswk.aspx
// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !MYTEST)
Console.WriteLine("DEBUG is defined");
#Elif (!DEBUG && MYTEST)
Console.WriteLine("MYTEST is defined");
#Elif (DEBUG && MYTEST)
Console.WriteLine("DEBUG and MYTEST are defined");
#else
Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
}
}
以下は安全に使用できます。
var isDebug = false;
#if DEBUG
isDebug = System.Diagnostics.Debugger.IsAttached;
#endif
if (isDebug) {
// Do something
}
public int Method ()
{
#if DEBUG
// do something
#endif
}
これはasp.netで機能します。
if (System.Web.HttpContext.Current.IsDebuggingEnabled)
//send email to developer;
else
//send email to customer;
rick Strahl @から Detecting-ASPNET-Debug-mode