38

私はこの問題についてもっと調べようとしていますが、あまり運がありません。アプリケーションでこのエラーが発生するべきではないことを読み続けていますが、それはすべて問題ありませんが、このエラーが表示される原因はわかりません。

このエラーには複数の原因が考えられると確信しているため、この質問は非常に幅広いことを知っているので、少し絞り込んでみます。

私はVS2003でC++.NETを使用するアプリケーションを開発しています

アプリケーションは、大部分がアンマネージ コードを使用し、マネージ コードはほとんど使用しません (ガベージ コレクターによる干渉が大きいため)。したがって、95% が管理されておらず、5% が管理されていると評価します。

不安定/バグのある/不適切なアンマネージ コードが CLR メモリの一部を台無しにし、破損してこのエラーをスローする可能性があることをどこかで読みました。

アプリケーションの 95% は管理されていないため、どこから調べればよいかわかりません。マネージとアンマネージの間で相互作用するいくつかのクラスでしょうか? マネージドからアンマネージドへのデータのマーシャリングについてはどうでしょうか? 無効なヌル ポインターが原因でこのエラーが発生する可能性はありますか? これを引き起こす可能性のある他の問題は何ですか?配列インデックスが範囲外ですか? Null オブジェクトはどうですか?

System.ExecutionEngine の失敗の考えられる原因の優れたリストを提供できる情報/紙/記事をいただければ幸いです。


回答に基づいて、この例外は複数のシナリオで発生する可能性があり、可視性を高めるために質問でここに言及します。

考えられる原因/シナリオのリスト:

考えられる回避策/解決策:

4

28 に答える 28

8

これはあまり真剣に受け止めるべきではありませんが、リフレクションを楽しんでいるときに、この例外を取得することができました。

typeof(IntPtr).GetField("Zero").SetValue(null, new IntPtr(666));
于 2012-04-24T16:22:34.847 に答える
5

同じ問題がありました - 私のバグは、C# コードと C++ ネイティブ dll の間の引数の不一致であることが判明しました。C++ 関数に引数を追加しましたが、C# 側に追加できませんでした。

于 2010-03-19T19:15:21.853 に答える
4

マネージ コードがリリース用にコンパイルされているときに、アンマネージ ライブラリで関数を呼び出すときに、この問題が発生しました。デバッグ用にコンパイルすると、エラーはなくなります。

于 2010-12-02T14:24:28.770 に答える
4

WCF サービスが IList または IEnumerable を返そうとするときの既知のバグがあります。

http://connect.microsoft.com/wcf/feedback/details/433569/wcf-throws-an-executionengineexception-when-returning-an-array-as-ilist-t

于 2010-03-02T21:09:33.480 に答える
4

のMSDNリファレンスページSystem.ExecutionEngineExceptionから引用:

共通言語ランタイムの実行エンジンで内部エラーが発生した場合にスローされる例外。このクラスは継承できません。

ExecutionEngineException に代わる、廃止されていない代替手段はありません。アプリケーションのそれ以上の実行を維持できない場合は、FailFast メソッドを使用します。

ヒント

場合によっては、.NET Framework を対象とするアプリケーションが、実行中のアプリケーションまたはシステムの負荷が高い場合、ガベージ コレクション中に ExecutionEngineException 例外をスローすることがあります。この場合、この問題を回避するには、アプリケーションの構成ファイルを変更して同時ガベージ コレクションを無効にします。詳細については、「方法: 同時ガベージ コレクションを無効にする」を参照してください。

于 2011-11-16T19:04:38.843 に答える
2

正直なところ、この例外を見たのは、Compuware DevPartner ツールを使用してプロファイリングとコード分析を行ったときだけです。DevPartner は CLR のコアに深く入り込んで機能しますが、バグが多いため、CLR を台無しにします。通常の状態に戻すには、マシンを再起動する必要がありました (そして、DevPartner のツールバー ボタンを二度とクリックしないことを忘れないでください)。

devpartner を使用していない場合は、アンマネージ コードが原因で、CLR が使用するメモリの一部を無駄にしている可能性があります。最初に再起動してから、メモリを破壊しているバグを追跡することをお勧めします。バッファー オーバーラン、初期化されていないポインターへの書き込み、およびその他すべての通常の疑わしいものを探します。

于 2009-06-08T21:40:30.713 に答える
2

その例外は廃止されているため、アプリケーションを .net 4.0 または 4.5 に更新してください。「注: この API は廃止されました。」参照: http://msdn.microsoft.com/en-us/library/system.executionengineexception(v=vs.100).aspx

于 2013-03-20T10:26:07.857 に答える
2

私は最近std、アセンブラの命令を使用して、完了時に方向フラグをクリアせずに方向フラグを設定すると ( cld)、このエラーが発生する可能性があることを発見しました。私は.Net 4.0を使用しています。

于 2010-07-18T07:30:32.687 に答える
2

ExecutionEngineException標準の .NET クリップボード呼び出しを使用するだけで、これが発生します。私のコードは 100% 管理されています。したがって、.NET Framework に問題があるようです。

PastedData = Clipboard.GetDataObject();
object imageObj = PastedData.GetData(dataType);

ここで、データ型は " EnhancedMetafile" で、クリップボードの形式のリストにありました。

于 2012-08-28T13:53:50.427 に答える
1

がスローされるもう 1 つのケースは、関数System.ExecutionEngineExceptionに提供されたデリゲートで未処理の例外がスローされるThreadPool.QueueUserWorkItem()場合です。

于 2013-10-10T15:25:41.647 に答える
1

WPF アプリケーションの作業中に、この例外に遭遇しました。VS は、NotifyPropertyChangedcall( INotifyPropertyChanged) を介してプロパティの変更を通知しているときに発生したことを示しました。

私には非常に奇妙に見えますが、それは一度だけ起こりました。デバッグセッションを停止し、アプリケーションを再度実行した後は発生しませんでした。

于 2012-10-12T09:56:45.750 に答える
0

間違ったマーシャリングを使用すると、この例外が発生します。使用する純粋なC*.dllがあります。DllImportを使用して、C#でラッパーを記述します。次に、マーシャリングを使用して、次のようにStringBuilderを埋めるために文字列パラメーターを出力しました。

    [DllImport("old.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Ansi)]
    public static extern UInt32 GetMessage([MarshalAs(UnmanagedType.LPStr)] out StringBuilder message);

使用UnmanagedType.LPStrすると、その例外が発生します。UnmanagedType.BStrこの場合、正しい文字列マーシャルを使用して、問題を解決しました。ちょうど私の2セント。:-)

于 2012-01-05T17:31:11.480 に答える
0

::FreeLibrary()これが発生したのは、同じDLLHANDLEで複数回呼び出していたためです。(DLLはマネージC ++ dllでした:いくつかのC#機能に対するマネージC ++ラッパー)

于 2010-08-02T05:13:41.767 に答える
0

Unity Frameworkを使用して ac# プログラムを作成しているときに、この例外に遭遇しました。

VS 2010 と .NET 3.5 を使用しています

基本的に、型を a に登録する場合UnityContainer:

container.RegisterType<IAClass, AClass>();

ただしAClass、引数を取らないコンストラクターはありません

class AClass : IAClass
{
   private int a;
   public in A { get { return a; } }
   public AClass(int a)
   {
       this.a = a;
   }
}

次に、クラスをインスタンス化するときに、System.ExecutionEngineException

IAClass A = container.Resolve<IAClass>(); //throws System.ExecutionEngineException
于 2010-09-30T13:51:12.717 に答える
0

かなり無害な状況で、純粋に管理されたWPFアプリでこの問題を解決することは、私には思えます。表示または非表示にするコントロールがグリッドにあるため、可視性を Visibility.Collapsed または Visibility.Visible に設定しています。それは崩壊し始めます。ボタンを押すと、可視に設定され、問題なく表示されます。別のボタンを押して、折りたたみとブームに設定します-大きな醜いエラーです。派手なものや珍しいものは何もありません。これは4.5を使用しています。非常に奇妙な。エラーのデータを見ると、System.Collections.EmptyReadOnlyDictionaryInternal.

于 2015-05-08T14:32:38.913 に答える
0

打ち方を追記します。

.Net 4 コード コンタクトを使用するContract.Ensures(Contract.Result<object>() != null)と、コード コントラクトのプロジェクト プロパティ ページで [Assert on Contract Failure] チェック ボックスがオンになっている場合に、この例外 IIF がスローされます。ただし、このチェックボックスを無効にしても、チェックは無効になりません。予期される「Post condition failed メッセージ」が表示されます。

于 2011-07-07T15:00:30.487 に答える
0

Azure サービス バスを使用するアセンブリを使用する C# 4.0 Web アプリケーションをデバッグしているときに、この例外を取得することができました。このアセンブリには、クローズされたサービスバスからメッセージを受信するために永遠にループしようとするバグがありますが、例外ハンドラーはその例外をキャプチャします。ただし、コードのデバッグ中に、実際にはこの例外で Visual Studio 2012 が強制終了されました! はい、例外をスローしたのは VS2012 でした。

于 2013-07-31T09:01:59.697 に答える
0

VS2010 を使用して FirstOrDefault を返す通常の LINQ クエリでこのエラーが発生します

于 2015-05-11T13:56:27.650 に答える
0

考えられる原因のリストに追加するために、複雑な型を含む IEnumerable<> をシリアル化しようとすると、このエラーが発生しました。

IEnumerable<>からに変更するとList<>、問題は解決しました。

于 2009-11-13T11:59:52.627 に答える
0

私の C# モジュール (/CLR でビルドされた C++/MFC アプリによって呼び出された) が誤って null ポインターを逆参照したときに、これらの 1 つを取得しました。そのため、「ユーザーコード」のバグにより例外が発生する可能性があります。

ケビン

于 2009-09-02T14:59:02.210 に答える
0

コンパイルしたバージョンとは異なるバージョンでアンマネージ コードを実行すると、この例外が発生しました。

多分それは誰かを助ける...

于 2010-06-18T13:45:24.797 に答える