13

DynamicMethod を使用して IL を生成する場合、 DynamicMethod コンストラクターのrestrictedSkipVisibility パラメーターに「true」を指定すると、メソッドを呼び出してフィールドにアクセスすることができます。

ビルド時に生成された IL をアセンブリに保存できるように、代わりに動的アセンブリに動的 IL を発行することをお勧めします。このメソッドを使用する場合、DynamicMethod の代わりに MethodBuilder を使用する必要があります。ただし、動的コードを実行したときに MethodAccessException が発生しないように、可視性チェックをスキップできるようにする必要があります。これを行う方法はありますか?

4

2 に答える 2

3

MethodBuilder を動的アセンブリに使用する場合、コンパイラで生成されたアセンブリと同じ規則に拘束されます。したがって、アセンブリ間の可視性は次のように制御されます。

ドキュメントとサンプルを読んで、ニーズに合うかどうかを確認してください。

于 2009-12-16T09:06:30.137 に答える
0

生成されたコードをデリゲートではなくインターフェイスで具体化する必要がある場合は、メソッドビルダーの VisibilityCheck をスキップすると便利です。直接行う方法は見つかりませんでしたが、EmitCalli(OpCodes.Calli...) を使用して MethodBuilder で DynamicMethod を簡単に呼び出すことができます。

于 2017-03-24T11:30:35.460 に答える