0

リクエストが送信された場所 (関数呼び出し) を検出する最良の方法を知りたい

意味:私のプロジェクトは次のようになります:

  • エンジン
  • Web プロジェクト (エンジンを使用)
  • テスト プロジェクト - コンソール プロジェクト (エンジンを使用)

Test プロジェクトを実行しているときに、一部のコードが関数内で実行されないようにしたいと考えています。

これを検出するためにブール値のパラメーターを送信できることは知っていますが、リクエストが Web プロジェクトからのものかどうかを検出する理由があるかどうかを知りたいです...

ありがとう!!

オレル。

4

4 に答える 4

3

呼び出されるコードがWebプロジェクトからのものかコンソールプロジェクトからのものかによって動作が異なる場合は、コードを共有ライブラリに含めないでください。それは本当にそれぞれのプロジェクトに属しています。

于 2012-04-18T18:33:42.400 に答える
2

TESTPROJECT シンボル セットを使用してテスト プロジェクトをコンパイルし、このシンボルを使用せずに Web プロジェクトをコンパイルします。次に、ConditionalAttributeにより、 SetIsFromTest() メソッドは、コードがテスト プロジェクトから呼び出された場合にのみ実行されます (したがって、フィールド IsFromTest は true に設定されます)。

static class Class1
{
    static bool IsFromTest = false;

    static Class1()
    {
        SetIsFromTest();
    }

    [Conditional("TESTPROJECT")]
    public static void SetIsFromTest()
    {
        IsFromTest = true;
    }

}

別のオプションは、共有ライブラリからの呼び出しアセンブリの名前をテストすることです。

if(System.Reflection.Assembly.GetCallingAssembly().FullName == "...")
于 2012-04-18T19:17:50.517 に答える
2

HttpContext.Currentnull でないことを確認できます。ただし、@JustinNiessnerのアドバイスは引き続き適用できます。

于 2012-04-18T19:03:59.197 に答える
0

StackFrameオブジェクトを使用して、スタックトレースにアクセスし、以前のメソッドが何を呼び出しているかを確認できます。この方法を使用すると、対応するプロジェクトを簡単に見つけることができます。古いものから投稿

StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();

警告する必要がありますが、それは楽しみのため/デバッグ時にのみ使用する必要があります。

于 2012-04-18T18:37:41.090 に答える