1. ホーム
  2. c#

[解決済み] InvalidProgramException / 共通言語ランタイムが無効なプログラムを検出しました。

2022-01-31 15:37:52

質問

これは、私が長い間見てきた中で最も奇妙なプログラミングの問題です。

を使っています。 Microsoft Visual C# 2010 Express , C#.NET 2.0 を使用して、アプリケーションを開発します。このアプリケーションは、いくつかの dll /アセンブリ(これらのDLLはすべて私のマシンで生成されます)。

以下はコードの一部です(基本的なものばかりです)。

public class PowerManagement
{

    [TestCase]
    public void PrepareTest(){
        // Configure according to pre-conditions
        Preconditions precondition = new Preconditions();
        precondition.SetupPreconditions();
            ...
    }

    [TestCase]
    public void PerformTest(){
        TestcaseData testcaseData = new TestcaseData();

        // Set Trigger and perform check
        switch (testcaseData.triggerNumber){
            case (1):
                if ((new Trigger1(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            ...
            case (4):
                if ((new Trigger4(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            default:
                Report.TestStepFail("Not yet implemented");
                break;
        }
    }
}

このアプリケーションを dll から Visual C# 2010 Express を他の場所で使用しても、すべて問題ありません。問題は、上記のswitch-statementに別のケースを追加したときに表面化します(以下参照)。

        ...
        case (4):
            if ((new Trigger4(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        case (5):
            if ((new Trigger5(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        default:
            Report.TestStepFail("Not yet implemented");
            break;

それでも一度も問題なくビルドでき、dllも生成できるのですが、生成されたdllを使用すると、以下のエラーが発生します。

A .NET exception (InvalidProgramException) occured in the module PowerManagement
Error message: Common Language Runtime detected an invalid program.
Throwing method: PowerManagement.PerformTest

(をコピーしても問題は発生しません。 case(4) とは関係なく、新しいケースとして貼り付けます。 Trigger5 -クラス)

ここで何が起こっているのでしょうか?私は他の InvalidProgramExceptionCommon Language Runtime をStackoverflowで見てみましたが、どれも関係なさそうでした。

この問題が奇妙なのは知っている ということで、詳しい情報を提供しますので、教えてください。私は64ビットのWindows 8マシンを使用しています。VSと.NETのアップデートはすでにチェック済みです。また、すべてのDLLを数回再生成し、ソリューションを数回ゼロから作成しました。

解決するには?

やっとこの問題を解決することができました。 私は code optimization をC# Expressで実行すると、問題が解決しました。しかし、古いツールやフレームワークを使用しているため、誰かのせいにすることはできません。