2

Castle Windsor を使用する ASP.NET MVC アプリケーションを実行しようとすると、次のエラーが発生します。

「/」アプリケーションでサーバー エラーが発生しました。

メンバー 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()' のオーバーライド中に継承セキュリティ ルールに違反しました。オーバーライドするメソッドのセキュリティ アクセシビリティは、オーバーライドされるメソッドのセキュリティ アクセシビリティと一致する必要があります。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.TypeLoadException: メンバーのオーバーライド中に継承セキュリティ ルールに違反しました: 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()'。オーバーライドするメソッドのセキュリティ アクセシビリティは、オーバーライドされるメソッドのセキュリティ アクセシビリティと一致する必要があります。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[TypeLoadException: メンバーのオーバーライド中に継承セキュリティ ルールに違反しました: 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()'. オーバーライドするメソッドのセキュリティ アクセシビリティは、オーバーライドされるメソッドのセキュリティ アクセシビリティと一致する必要があります。]
Castle.Windsor.WindsorContainer..ctor() +0

アセンブリは、 githubで入手可能なソース コードから構築されていCastle.Core.dllます。アセンブリのソース コードには、次のソース コードを含むファイルが含まれています。Castle.Windsor.dllSecurityAssemblyInfo.cs

// Sets up assembly level security settings
#if ! SILVERLIGHT
[assembly: System.Security.AllowPartiallyTrustedCallers]
#if DOTNET40
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level2)]
#endif
#endif

ILSpyを使用しSystem.Security.AllowPartiallyTrustedCallersて、両方のファイルのアセンブリで属性が宣言されていることを確認しました。

Web アプリケーションは で実行されてい<trust level="Medium" />ます。

4

1 に答える 1

3

Castle.Coreに次の変更を加えることで、mvc アプリケーションのビルドと実行を成功させることができました。

SecurityAssemblyInfo.cs:

以下のみ変更。

[アセンブリ: System.Security.AllowPartiallyTrustedCallers] [アセンブリ: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

ProxyGenerator.cs:

ProxyGenerator::ProxyGenerator(IProxyBuilder) の 3 行を変更しました。

if (HasSecurityPermission())
{
    Logger = new TraceLogger("Castle.DynamicProxy", LoggerLevel.Warn);
}

になります:

// if (HasSecurityPermission())
// {
//    Logger = new TraceLogger("Castle.DynamicProxy", LoggerLevel.Warn);
// }

これらがどのような結果をもたらすかはわかりませ。SecurityRuleSets に精通している誰かが最初の部分に参加してくれればいいのですが、@Krzysztof Koźmic がなぜ私がトレース ロガーをコメントアウトしなければならなかったのかを教えてくれます。

于 2012-07-30T03:57:43.200 に答える