オブジェクトを動的引数として渡すと、予期しない RuntimeBinderInternalCompilerException が発生します。
コードを簡単に貼り付けるには複雑すぎるため、シナリオを説明しようと思います。私は Roslyn で非常に奇妙なハッカーを行っているので、奇妙に聞こえるかもしれません。
- アプリケーションの実行
- ソースコードの変更を監視する
- 変更されたファイル/クラスを使用して、実質的にアセンブリの差分を再コンパイルします
- 新しくコンパイルされたアセンブリを元の AppDomain に読み込みます
- 既存のオブジェクト インスタンスを動的として新しいコードまたは変更されたコードに渡し、新しいコードが既存のコンテキスト/アプリケーションの状態で動作できるようにします。
型には互換性があるため、この動的な受け渡しは機能するはずです。つまり、私の場合、機能的に一致するメソッド/型があることを保証できます。
しかし、changed+reloaded メソッドを実行しようとして、動的タイプのオブジェクトを受け取ると、この例外が発生します。
RuntimeBinderInternalCompilerException was unhandled.
An unexpected exception occurred while binding a dynamic operation
MSDN によると:
この種の例外は、RuntimeBinderException とは異なり、RuntimeBinderException は通常のコンパイラ エラーの意味でのバインドの失敗を表し、RuntimeBinderInternalCompilerException はランタイム バインダー自体の誤動作を表します。
Google には、これに関する結果はまったくありません。さらにデバッグする方法もわかりません。助言がありますか?
(実行時にさまざまなアセンブリをテスト アプリケーションにロードし、さまざまなアセンブリからインスタンス化された型を動的パラメーターを受け入れる単一のメソッドに渡すことができることを確認するために、いくつかのサンドボックス テストを行いました。したがって、そのシナリオでは機能します。)