2

メモリ内の AssemblyBuilder のクラスにアタッチされた DynamicMethod を作成したいというかなり複雑なシナリオがあります。動的メソッドは、私の(通常の)アセンブリでメソッド「GetReplacement」を呼び出します。

これは .NET 2.0 では問題なく動作しましたが、.NET 4.0 では次のエラーが発生します。

MethodAccessException: Attempt by security transparent method 'DynamicClass.Max(Int32, Int32)' 
to access security critical method 'xxx.GetReplacement()' failed.

私が読んだことから、動的メソッド (上記のエラーの Max) は、それがアタッチされているアセンブリ (AssemblyBuilder) が透過的であるため、セキュリティ透過的です。AssemblyBuilder は動的アセンブリであるため、透過的だと思います。

動的メソッドをクリティカルにする方法、または GetReplacement を呼び出す権限を付与するために必要なことを行う方法は? GetReplacement のアセンブリで呼び出したいメソッドが他にもいくつかあるので、何らかの方法で GetReplacement をマークするよりも、動的メソッドを修正する方がよいでしょう。

私は少し道に迷っており、何か助けていただければ幸いです。

4

2 に答える 2

1

作成中に、 CustomAttributeBuilderを使用してSecurityCriticalAttributeをアセンブリに割り当てるAssemblyBuilder必要があります。

アセンブリがセキュリティクリティカルとしてマークされたら、同じ属性を任意のDynamicMethodに追加できます。

于 2010-07-14T15:11:34.470 に答える
1

おっと、これは私の間違いでした。ドキュメントは正しいです。動的メソッドは、アタッチされている型からセキュリティを継承します。型にアタッチしないメソッドは、セキュリティ透過アセンブリにアタッチされます。セキュリティをオーバーライドする DynamicMethod に属性を追加することはできません。適切な型にアタッチする必要があります。

私はばかげた間違いを犯していました.mscorlib(セキュリティ透過的)に添付されたものではなく、AssemblyBuilderに添付された動的メソッドを見ています。

于 2010-07-15T09:37:00.100 に答える