无法加载文件或程序集..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

无法加载文件或程序集..Windows Azure网站

我讨厌这样做。在SO上发布一个问题,因为我已经尝试了一整天,然后10分钟后我就解决了。

所以我似乎错过了一条关键信息,这会有很大帮助。

BadImageFormatException

这(据我所知)是在平台(体系结构)兼容性(x86、x64)出现问题时抛出的。我的所有项目都是为"任何CPU"编译的(可以在项目属性>构建>平台目标,VS2013下找到)。

然而,我的"Lib"项目仅为x64构建,Azure网站以32位模式运行,因此无法加载64位dll。

两种选择:

  1. 将"Lib"dll编译为AnyCPU或32位,然后重新发布
  2. 将azure网站切换到64位

我不同意选项2,因为"Lib"dll是什么,我需要它作为64位。

因此,为了将来参考,如果其他人有这样的东西,请检查以下内容:

  1. Azure网站平台(位于配置>平台下,旧门户
  2. 检查您的所有项目是否设置为任何CPU或兼容的"平台(架构)"

我希望这能帮助其他人。

感谢

Steve

编辑:如果其他人有更多有用的信息可以添加给将来可能有这个问题的人,请这样做。

我知道这个问题说明了"Lib";我的情况并非如此。然而,我在Azure App Service中有BadImageFormatException,这是我发现的最接近的问题。事实证明,我使用appTypewebAppLinux而不是webAppWindows部署了该应用程序(管道部署),并且启用了基于代理的监控Application Insights,Linux不支持它。因此,对于这种问题,关闭基于代理的监控解决了我的问题。顺便说一句,你需要在关闭应用程序后重新启动它。