如何调试程序集加载 - ConfigurationErrorsException

时间:2011-05-14 09:40:34

标签: .net debugging assembly-loading

我有一个在本地运行良好的应用程序,但在部署时我看到错误:

Exception information: 
    Exception type: ConfigurationErrorsException 
    Exception message: Could not load file or assembly 'FluentMigrator.Runner' or one of its dependencies. An attempt was made to load a program with an incorrect format.
    at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
    at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
    at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
    at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
    at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
    at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

我已经尝试通过程序集绑定日志查看器查看程序集绑定日志,但即使打开它我没有获得比上面的堆栈跟踪更多的信息,日志似乎保持为空。它抱怨的组件存在,并且它的表面上存在所有依赖组件。我还可以做些什么来调试我服务器上的错误?

1 个答案:

答案 0 :(得分:2)

此错误与架构不匹配有关,即您的二进制文件可能希望在x86进程中运行,但IIS在x64进程中运行这些错误(反之亦然)。这可以在应用程序池设置中进行配置。

要调试此问题,您可以尝试以下操作: 1)启用融合记录( How to enable assembly bind failure logging (Fusion) in .NET

2)使用带有加载程序快照的Windows调试器(WinDbg)。 请看这里如何设置它。 http://www.microsoft.com/msj/0999/hood/hood0999.aspx

当在WinDbg中使用 sxeclr 命令捕获托管异常时 当您点击ConfigurationErrorsException时,您应该运行 .loadby sos clr 命令,然后运行!pe - 这应显示有关异常的更多详细信息。同时,加载器快照应该显示哪个DLL有加载问题。 您需要在WinDBG下运行IIS工作进程(w3wp.exe)。您应该使用gflags来配置它。 通常2)可以帮助C ++ / CLI程序集。