web-dev-qa-db-ja.com

「式エバリュエーターの内部エラー」

Visual Studio 2015の式エバリュエーターで、「式エバリュエーターの内部エラー」という問題に遭遇しました。いくつかの調査の後、これはリフレクションを使用して読み込まれるアセンブリによって引き起こされることがわかりました。このアセンブリは例外をスローしませんが、その後、vs exp評価者は失敗します。これは、私がロードする唯一のアセンブリではありません。評価者に影響を与えないいくつかの良い動作するアセンブリがあります。

この問題を解決するには、「メニュー>オプション>デバッグ>管理互換モードを使用する」をチェックする必要がありましたが、これにより「編集と続行」機能が無効になります。

コーザーアセンブリのプロパティ:

  • その名前はメインアセンブリと同じです(名前を変更しましたが、何も起こりませんでした)
  • 私のプロジェクトはすべてdotNet 4.5を使用しています
  • すべてのルート名前空間は同じです(すべてのアセンブリも同じです)

ありがとう!

55

これは、式エバリュエーターのバグのように聞こえます。より良い回避策については、「管理互換モードを使用する」をチェックする代わりに、「レガシーC#およびVB] _式エバリュエーターを使用する」をチェックしてください。これにより、最後のいくつかのリリースで追加された他の機能と同様に、編集と続行を引き続き使用できるようになります。

「式エバリュエーターの内部エラー」に関しては、[ヘルプ]-> [フィードバックの送信]-> [問題の報告]に移動して問題を開いてください。これは、将来のリリースで問題を解決するのに役立ちます。

70

Patrick Nelsonが提供するソリューションを拡張するだけです。問い合わせられたVisual Studio 2015+の場合、手順は次のとおりです。

Tools->Optionsに移動します VS Options

そしてここでオプションの下でDebug->Generalを選択し、下にスクロールします... legacy C#expression ..オプションを見つけます。

VS Options Debug Legacy options

詳細については、次を参照してください。

管理互換モードへの切り替え

注:レガシーモードへの切り替えから生じる重大な欠点もいくつかあります。特に、実装されたインターフェースのRuntime Reflectionは、ほとんど不可能または非常に不便になります。エラーをスローする他のReflectionメソッドもあります。

29
Lorenz Lo Sauer

私にとっては、「管理された互換モードを使用する」オプションが有効でした。プロパティと値の代わりに変数の上にマウスを移動すると、疑問符も表示されました

4
Talha Anwer

デバッグモードではなくリリースモードでデバッグしているときに、「式エバリュエーターの内部エラー」エラーが発生しました。本番環境に公開するときにリリースに変更しましたが、デバッグに戻すのを忘れていました。

Release Mode

Debug Mode

1
MsTapp

私の場合、List <>のラムダ式を評価しようとして、そのようなエラーが発生しました(「式エバリュエーターの内部エラー」)。 VS2015を使用していたため、ラムダ式が許可されました。式評価者にはLinqライブラリが欠けていたことがわかります。追加した

using System.Linq;

私の現在のクラスとvoilàに!ラムダが評価した。

1
pilak

この問題を解決するには、単に「ツール」->「設定のインポートとエクスポート」に進み、デフォルト設定にリセットすることを選択して、Visual Studioの設定をリセットします。

1
Brandon

[DebuggerBrowsable]属性の使用を確認してください。 VisualStudio 2017 15.5で最小限のケースを見つけて投稿しました こちら

この特定のケースでは、同じ名前のフィールドをオーバーライドするプロパティに適用される[DebuggerBrowsable]属性に関連する式エバリュエーター(EE)クラッシュが表示されます。これは、人々がそこに経験しているケースのsome割合を説明しますが、それまでにこの特定の問題に起因する数を知る方法はありません修正されます。

完全で完全なデモンストレーションの例が画像に示されています(そして、適切な測定のために以下に含まれています)

enter image description here

画像内のコードの機械可読コピー:

using System;
using System.Diagnostics;

class Program { static void Main() => new _derived(); }

abstract class _base
{
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    public Object trace;
};

class _derived : _base
{
    public _derived() => Debugger.Break();      // <-- vs2017 EE crash when stopped here

    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    new public Object trace => base.trace;
}
0
Glenn Slayden

私の場合、2つの異なるフォルダーに2つの同じdllファイルがありました(1つのdllが正しくなかったようです)。 .dllを削除してソリューションを再構築すると、問題が解決しました。

0
constructor