web-dev-qa-db-ja.com

InvalidProgramException /共通言語ランタイムが無効なプログラムを検出しました

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

_Microsoft Visual C# 2010 Express_、_C#_、および_.NET 2.0_を使用してアプリケーションを開発しています。このアプリケーションは、いくつかのdll/assembliesを参照します(これらの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;
        }
    }
}
_

その後、このアプリケーションは_Visual C# 2010 Express_からdllに生成され、他の場所で使用され、すべて問題ありません。上記のswitchステートメントに別のケースを追加すると、問題が表面化します(以下を参照)

_        ...
        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_- classとは関係ありません)

ここで何が起きてるの? Stackoverflowの他のInvalidProgramExceptionと_Common Language Runtime_を調べましたが、関連するものはありませんでした。

私はこの問題が奇妙であることを知っていますそれで私に知らせてください、そして、私は詳細を提供します。それが重要な場合は、64ビットのWindows 8マシンを使用しています。 VSおよび.NETの更新プログラムの更新を既に確認しました。また、すべてのdllを数回再生成し、ソリューションを何回もゼロから作成しました。

20
theAlse

私はついにこの問題を解決することができました。私はチェックを外しましたcode optimization C#Expressで問題を解決しました。まだ最も奇妙なことですが、古いツールとフレームワークを使用しているため、実際に誰も責めることはできません。

6
theAlse

この経験を追加したかっただけです...私の場合、AzureでC#Web APIをホストしていて、APIにログインしようとするとこのメッセージが表示されました。 Azure管理ポータル(portal.Azure.com)に移動し、App Servicesに移動して、Web APIプログラムを選択し、概要画面から[再起動]をクリックする必要がありました。この後、プログラムは再び正常に機能しました。ログにそれ以上の手がかりは見つかりませんでした。

20
slasky

アプリケーションプールで32ビットアプリケーションを有効にしてみてください 詳細設定

7
algiecas

Visual Studio 2017 v15.8.6にアップグレードした後、この問題が発生しました。 web.configのコンパイルタグでassemblyPostProcessorType属性を削除すると、問題はなくなりました。

7
Brad Hurley

MSDeployを使用してAzure WebAppに展開した後に、このエラーが発生することがあります。エラーは、2回目の再デプロイ後に常に消えました。

ビルドとデプロイメントは2つの異なるステップです。再デプロイメントは毎回まったく同じファイルを送信します-これは、この質問の回答のどこかで示唆されているように、問題がコンパイラーの問題ではないことを示唆しています。

MSDeployのバグ、またはIIS AzureのWebAppsに使用されているバージョン...).

4
TheLogicMan

[〜#〜] msdn [〜#〜] :「一般的に、これはプログラムを生成したコンパイラのバグを示しています。」

まず、すべての更新プログラムがWindows、.NET、およびVisual Studioにインストールされていることを確認します。

また、Microsoftサポートで Q312544 もチェックアウトする必要があります。

3
MarkO

このような問題は、たとえば Fody とそのプラグインを使用している場合、コンパイル後にアセンブリのILを操作するツールのバグが原因である可能性があります。少なくとも、Fody MethodDecoratorにはそのような効果を引き起こすバグがあります。 https://github.com/Fody/MethodDecorator/issues/8 を参照してください。

2
avitenberg

以下を実行して、この問題を解決しました。

  • C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.exeの名前をC:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Toolsに変更します\ vsinstr.exe.broken
  • C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.legacy.exeの名前をC:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\Team Tools \に変更しますパフォーマンスツール\ vsinstr.exe
  • ソリューションを再構築する
1
Mike Perrenoud

問題がAzureアプリにデプロイされたWeb APIdotnetcoreに関係する場合、これはアプリケーションの洞察が原因である可能性があります。アプリケーションの洞察をブレードレベルで設定すると、問題が解決するはずです。また、ブレードレベルでrecommended settings vs basicとして設定すると、未解決の問題があるようです。基本は機能する値です。

AzureでAPIアプリとしてWeb Apiをデプロイするこの問題に遭遇しました。エンドポイントへの最初の要求は、予想される応答になります。ただし、後続の要求は同じ共通言語ランタイムエラーを返します。 WebアプリのApplication Insightsブレードで推奨コレクションレベルを有効にしたときに開始された問題を把握しました。推奨を設定し、すべてのラジオボタンを有効にしました。この変更を元に戻すと、エラーが停止しました。参考までに、実行しているAPIはMicrosoft.ApplicationInsights 2.8.1を実行しています

参考: https://github.com/dotnet/coreclr/issues/1832

1
Adrian

これは、IISでホストしているときに出会った興味深い例外です。 IISの.NET Frameworkバージョンが、私のプロジェクトが使用していた.NET Frameworkバージョンとは異なることを発見した後、解決しました。他の参照プロジェクト/ ddl( s).NET Frameworkバージョンも必ず更新してください。

0
Johnny Camby

Azure Web Appsに固有のこの問題がある場合-インストールされている拡張機能を確認してくださいMicrosoft.ApplicationInsights.AzureWebSites-またはわかりやすい名前 Azure App ServiceのApplication Insights拡張機能 および kudu経由で削除 =。

enter image description here

この拡張機能がmsdeployプッシュを妨げる可能性があることがわかりました-プロセスがありましたsnapshotholder_x64.exe IIS w3wp.exe 処理する。誰かがこの拡張機能をAzureポータル経由で有効にしている可能性があります。

enter image description here

0

私は自分でこの問題に遭遇しました。 VSは私のために仮想ディレクトリを作成しましたが、デフォルト言語としてvbがありましたが、C#アプリケーションがあります。この設定を変更することで解決しました。 enter image description here

0
Glenn Cuevas

-「コードの最適化」のチェックを外します(参照されたdllを含む)-.net framework 4.6へのアップグレード

0
Kerem Bayraktar

どこからともなくXXX webservice Exception , System.InvalidProgramException: Common Language Runtime detected an invalid program.

コンパイルされたWebサイトを別の環境にコピーしました-正常に動作します。別のサーバーにコピー-正常に動作します。

サーバーがリセット(リブートまたはアプリプールのリセット)されたときに、この例外が開始されたことに気付きました。この問題を調査するとき、ブライアンライクルによる16年6月6日12:33のコメントに気付きました。

質問で説明されたInvalidProgramExceptionではなく、BadImageFormatExceptionが発生するビットネスの不一致が予想されます。

私はInvalidProgramException例外に精通していませんでしたが、BadImageFormatExceptionに精通しており、症状はBadImageFormatExceptionの問題で発生するものと非常に似ています。いずれかの例外が発生する理由を100%とは言い切れません。現在の実行理論は64ビットマシンで実行される32ビットアプリケーションですが、それを証明することも永続的に修正することもできません。アプリプールで32ビットアプリケーションを有効にしても、問題は解決しませんでした。

私たちが知っている唯一の修正方法は、一時的ではありますが、単にアプリケーションプールをリサイクルすることです。再コンパイルする必要はありません。幸いなことに、これはあまり頻繁には発生せず、おそらく月に1〜2回です。

0
George