【发布时间】:2017-04-26 14:14:53
【问题描述】:
我有一个托管在中等信任环境中的 ASP MVC 应用程序。这意味着唯一可以执行的代码是应用程序信任文件的代码权限中定义的代码。我看到在较新的 MVC 应用程序中调用了一个方法 ExecutePreAppStart()。然后此方法尝试执行LoadAllAssembliesFromAppDomainBinDirectory()。发生这种情况时会生成权限错误
[PolicyException: 无法获取执行权限。]
如果应用尚未被授予执行该程序集的显式权限。这是预期的结果。
这里的问题是在 PreApplicationStartMethod 的实现之前这个错误会冒泡到 global.asax 中的Application_Error。使用 PreApplicationStartMethod 不再是这种情况。由于 PreApplicationStartMethod 不在我控制的代码中,如何捕获可能发生的错误?
我尝试创建自己的 PreApplicationStartMethod 来捕获异常,但它从未到达断点,因为应用程序从未完全加载。
那么,有没有办法为别人的 PreApplicationStartMethod 捕获错误?我的最终目标是能够发布异常。
尝试捕捉错误:
[assembly: System.Web.PreApplicationStartMethod(typeof(mynamespace.Initializer), "Initialize")]
namespace mynamespace
{
public static class Initializer
{
public static void Initialize()
{
//Do something here to catch errors/bind event? but I never get this far at runtime
}
}
}
堆栈跟踪:
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔型 starDirective) +772
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +259 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +163
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +230
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +76 System.Web.Compilation.BuildManager.CallPreStartInitMethods(字符串 preStartInitListPath, Boolean& isRefAssemblyLoaded) +343
System.Web.Compilation.BuildManager.ExecutePreAppStart() +176
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, 异常 appDomainCreationException) +734
【问题讨论】:
标签: c# asp.net-mvc exception-handling