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

这些程序集是根据githubCastle.Core.dllCastle.Windsor.dll可用的源代码构建的。程序集的源代码包括具有以下源代码的文件:SecurityAssemblyInfo.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)]

代理生成器.cs:

在 ProxyGenerator::ProxyGenerator(IProxyBuilder) 中更改了三行:

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 回答