我正在开发一个asp.net 3.5 Web应用程序,该应用程序在我的本地IIS服务器上运行完美,但在将其发布到托管(1and1)环境时会让我遇到很多麻烦。
加载web.config时,“System.Security.Policy.PolicyException:无法获取所需的权限”。抛出异常。堆栈跟踪表明这是由于我使用Castle.Windsor框架引起的:
[PolicyException:无法获取所需的权限。]
System.Security.SecurityManager.ResolvePolicy(证据证据, PermissionSet reqdPset,PermissionSet optPset,PermissionSet denyPset, 的PermissionSet和放大器;否认,布尔检查执行权限)+7606231
System.Security.SecurityManager.ResolvePolicy(证据证据, PermissionSet reqdPset,PermissionSet optPset,PermissionSet denyPset, 的PermissionSet和放大器;否认,Int32& securitySpecialFlags,布尔值 checkExecutionPermission)+57[FileLoadException:无法加载文件或程序集'Castle.Windsor, Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或 其中一个依赖项。无法授予最低权限请求。 (HRESULT的例外情况:0x80131417)] System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint, StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection)+0 System.Reflection.Assembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound, 布局为内省)+43
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, 证据集合安全,StackCrawlMark& stackMark,布尔 forIntrospection)+127
System.Reflection.Assembly.InternalLoad(String assemblyString, 证据集合安全,StackCrawlMark& stackMark,布尔 forIntrospection)+142 System.Reflection.Assembly.Load(String assemblyString)+28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔starDirective)+46[ConfigurationErrorsException:无法加载文件或程序集 'Castle.Windsor,Version = 3.0.0.0,Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败 授予最低权限请求。 (HRESULT的例外情况: 0x80131417)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔starDirective)+613
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +203 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)+105
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)+178
System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath,Boolean supportLocalization,String outputAssemblyName) +54 System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp)+232
System.Web.Compilation.BuildManager.CompileGlobalAsax()+51
System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()+337[HttpException(0x80004005):无法加载文件或程序集 'Castle.Windsor,Version = 3.0.0.0,Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败 授予最低权限请求。 (HRESULT的例外情况: 0x80131417)]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()+ 512 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters) 729[HttpException(0x80004005):无法加载文件或程序集 'Castle.Windsor,Version = 3.0.0.0,Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败 授予最低权限请求。 (HRESULT的例外情况: 0x80131417)] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+8921851
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+85 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+333
由于托管环境限制,我在调查此问题方面非常有限 - 特别是我无法查看machine.config和IIS配置。我确切知道的一个事实是它运行在2.0.50727.5456框架上...托管服务商的客户服务既不能胜任也不愿意提供帮助,所以我必须自己做。
任何有关如何深入了解原因或如何简单解决此问题的建议都非常感谢。
答案 0 :(得分:1)
我发现1& 1对所有托管的asp.net应用程序使用一般的中等信任级别。似乎Castle Windsor无法在这样的权限限制环境下运行(例如,那里没有反射)。
幸运的是,在这种情况下可以使用很多替代方案(参见which-ioc-runs-in-medium-trust)。我只是使用simple injector这是一个很小的(但我的目的很强大)IoC容器,它做得很好,解决了我所有的许可问题。