尝试运行使用Castle Windsor的ASP.NET MVC应用程序时,会发生以下错误。
>应用程序中的服务器错误。覆盖成员时违反了继承安全规则: 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()'。 覆盖方法的安全性可访问性必须与 被覆盖的方法的安全可访问性。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.TypeLoadException:继承安全性 覆盖成员时违反规则: 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()'。 覆盖方法的安全性可访问性必须与 被覆盖的方法的安全可访问性。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈追踪:
[TypeLoadException:违反了继承安全规则 重写成员: 'Castle.MicroKernel.DefaultKernel.InitializeLifetimeService()'。 覆盖方法的安全性可访问性必须与 被覆盖的方法的安全可访问性。]
Castle.Windsor.WindsorContainer..ctor()+ 0
程序集Castle.Core.dll
和Castle.Windsor.dll
已根据github上提供的源代码构建。程序集的源代码包含文件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
属性。
正在使用<trust level="Medium" />
运行Web应用程序。
答案 0 :(得分:3)
通过对 Castle.Core 进行以下更改,我已经能够成功构建+运行我的mvc应用程序:
仅更改为 以下内容:
[assembly:System.Security.AllowPartiallyTrustedCallers] [assembly:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
在ProxyGenerator :: ProxyGenerator(IProxyBuilder)中更改了三行:
if (HasSecurityPermission())
{
Logger = new TraceLogger("Castle.DynamicProxy", LoggerLevel.Warn);
}
变为:
// if (HasSecurityPermission())
// {
// Logger = new TraceLogger("Castle.DynamicProxy", LoggerLevel.Warn);
// }
我有没有的想法可能会产生什么样的后果。如果熟悉SecurityRuleSets的人可以在第一部分中插入,那将是很好的,@KrzysztofKoźmic可以告诉我为什么我必须注释跟踪记录器。