私はかなり安定したサーバーアプリケーションバージョンを持っており、これは数十の顧客にほぼ1年間展開されています。
最近、ある新しい顧客がアプリケーションをセットアップし、次のエラーが発生しました。
System.MethodAccessException:セキュリティ透過メソッド[SomeMethod]によるセキュリティクリティカルメソッド[SomeOtherMethod]へのアクセスに失敗しました。
SomeMethodとSomeOtherMethodはどちらも、私が作成したアセンブリ内のメソッドであり、.NET 4に対して構築されており、Windowsサービス内で実行されています。違いが生じる場合、SomeOtherMethodは、.NET 2.0に対して構築されたサードパーティアセンブリ(EntLib 4.1)の型を参照します。EntLib 4.1のコードを見ると、SecurityTransparent属性とAPTC属性の両方を使用していることがわかりますが、これによって他のクライアントで問題が発生したことはありません。
これらのアセンブリは.NET2.0CLRからアップグレードされましたが、かなり前のことです。この正確なコードは他の顧客でも問題なく実行されており、APTC属性を明示的に使用しておらず、SecurityCritical属性をどこでも使用していません。
これにより、構成の問題か、おそらく.NETFrameworkのパッチの問題であるという結論に至ります。この重大な変更を引き起こす.NET用にリリースされたパッチはありますか?このタイプのチェックを強制する構成設定はありますか?デフォルトではオフになっていますが、顧客が有効にしている可能性がありますか?
最後にもう1つ。私のサービスはSSRSRDLCを使用してPDFを生成します。.NET 4でのいくつかの変更により、次の構成を使用して、サービスにレガシーセキュリティポリシーを使用するように強制する必要があります。
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
これを行う必要がある理由の詳細については、このスタックオーバーフローの投稿を参照してください:.NET4.0での非常に高いメモリ使用量
重要な点は、他のすべての顧客でもこれを行うことです。この1人の顧客だけが問題を抱えています。