温莎城堡不适用于中型信托

时间:2012-07-30 02:25:45

标签: asp.net-mvc castle-windsor

尝试运行使用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.dllCastle.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应用程序。

1 个答案:

答案 0 :(得分:3)

通过对 Castle.Core 进行以下更改,我已经能够成功构建+运行我的mvc应用程序:

SecurityAssemblyInfo.cs:

仅更改为 以下内容:

  

[assembly:System.Security.AllowPartiallyTrustedCallers]   [assembly:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

ProxyGenerator.cs:

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

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

变为:

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

我有没有的想法可能会产生什么样的后果。如果熟悉SecurityRuleSets的人可以在第一部分中插入,那将是很好的,@KrzysztofKoźmic可以告诉我为什么我必须注释跟踪记录器。