2009-09-29 4 views
12

DynamicMethodを使用してILを生成するとき、それはあなたがDynamicMethod constructorMethodBuilderを使用して動的ILを生成する際に、可視性チェックをスキップすることはできますか?

にrestrictedSkipVisibilityパラメータに「真」を提供する場合、私は、動的アセンブリにダイナミックILを放出することを好むそうでない場合は、非アクセスだろう方法とアクセスフィールドを呼び出すことが可能ですビルド時に生成されたILをアセンブリに保存することができます。このメソッドを使用する場合は、DynamicMethodではなくMethodBuilderを使用する必要があります。しかし、私は動的なコードを実行するときに私はMethodAccessExceptionを取得しないように私は可視性チェックをスキップすることができる必要があります。これを行う方法はありますか、もしそうなら、方法はありますか?

+0

この問題は解決されていますか?どのように解決したのか簡単に説明できますか? – kizzx2

+0

いいえ、私はそれが解決できないと言うことができます。 Mono.Cecilライブラリを使用してアセンブリを書き直すことで、解決策にもう一度アプローチしました。こうすることで、タイプセーフティルールに違反することなく、プライベートメンバーまたは内部メンバーにアクセスできます。しかし、その方法では、シンボルをソースファイルに正確に一致させることができず、他の厄介さを引き起こしました。 –

答えて

2

ダイナミックアセンブリにMethodBuilderを使用する場合、コンパイラによって生成されたアセンブリと同じ規則にバインドされます。したがって、アセンブリ間の可視性は、以下によって制御されます。

お客様のニーズに合わせて、マニュアルとサンプルをお読みください。

0

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

関連する問題