无法加载文件或程序集..Windows Azure网站
本文关键字:Windows Azure 网站 程序集 加载 文件 | 更新日期: 2023-09-27 18:19:56
我知道周围有很多这样的帖子,我以前自己处理过这些帖子,除了这次没有任何问题。这是因为我无法从Windows Azure获得我需要的调试信息,希望有人能帮助我。
所有这些工作在我的本地环境中都很好,debug&释放
我收到以下错误:未能加载文件或程序集"Lib"或其依赖项之一。试图加载格式不正确的程序。
Lib确实存在于目录中,它只依赖于System.Drawing&mscorlib。
通常我只会附加到AppDomain.Current.AssemblyResolve
,或者在抛出异常时检查它。我无法在Azure上执行此操作,因为异常发生在预加载过程中。
[BadImageFormatException: Could not load file or assembly 'Lib' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +16
System.Reflection.Assembly.Load(String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38
[ConfigurationErrorsException: Could not load file or assembly 'Lib' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +736
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +217
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +130
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +170
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91
System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +284
System.Web.Compilation.BuildManager.ExecutePreAppStart() +153
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +521
[HttpException (0x80004005): Could not load file or assembly 'Lib' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9930568
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254
有没有一种方法可以覆盖/创建自定义程序集加载程序来拦截这个问题?
我完全不知所措。
感谢
Steve
我讨厌这样做。在SO上发布一个问题,因为我已经尝试了一整天,然后10分钟后我就解决了。
所以我似乎错过了一条关键信息,这会有很大帮助。
BadImageFormatException
这(据我所知)是在平台(体系结构)兼容性(x86、x64)出现问题时抛出的。我的所有项目都是为"任何CPU"编译的(可以在项目属性>构建>平台目标,VS2013下找到)。
然而,我的"Lib"项目仅为x64构建,Azure网站以32位模式运行,因此无法加载64位dll。
两种选择:
- 将"Lib"dll编译为AnyCPU或32位,然后重新发布
- 将azure网站切换到64位
我不同意选项2,因为"Lib"dll是什么,我需要它作为64位。
因此,为了将来参考,如果其他人有这样的东西,请检查以下内容:
- Azure网站平台(位于配置>平台下,旧门户)
- 检查您的所有项目是否设置为任何CPU或兼容的"平台(架构)"
我希望这能帮助其他人。
感谢
Steve
编辑:如果其他人有更多有用的信息可以添加给将来可能有这个问题的人,请这样做。
我知道这个问题说明了"Lib";我的情况并非如此。然而,我在Azure App Service
中有BadImageFormatException
,这是我发现的最接近的问题。事实证明,我使用appTypewebAppLinux而不是webAppWindows部署了该应用程序(管道部署),并且启用了基于代理的监控Application Insights
,Linux不支持它。因此,对于这种问题,关闭基于代理的监控解决了我的问题。顺便说一句,你需要在关闭应用程序后重新启动它。