变得奇怪的BadImageFormatException:无法加载参考程序集执行

时间:2018-08-19 18:39:07

标签: c# .net msbuild visual-studio-2017

我遇到了一个疯狂的系统负载问题,我不知道这是什么。错误和来自

的输出
  

“ /”应用程序中的服务器错误。无法加载参考装配   执行。说明:在处理期间发生未处理的异常   当前Web请求的执行。请检查堆栈跟踪   有关该错误及其起源的更多信息   代码。

     

异常详细信息:System.BadImageFormatException:无法加载   参考程序集以执行。

     

源错误:

     

在执行过程中生成了未处理的异常   当前的Web请求。有关原产地和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈跟踪:

     

[BadImageFormatException:无法为以下项目加载参考程序集   执行。]

     

[BadImageFormatException:无法加载文件或程序集'System.IO'   或其依赖项之一。参考程序集不应加载   执行。它们只能在仅反射的加载器中加载   上下文。 (来自HRESULT的异常:0x80131058)]
  System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,字符串   codeBase,证据程序集安全性,运行时程序集locationHint,   StackCrawlMark&stackMark,IntPtr,pPrivHostBinder,布尔值   throwOnFileNotFound,用于自检的布尔值,布尔值   hibitSecurityChecks)+0
  System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,字符串   codeBase,证据程序集安全性,运行时程序集locationHint,   StackCrawlMark&stackMark,IntPtr,pPrivHostBinder,布尔值   throwOnFileNotFound,用于自检的布尔值,布尔值   hibitSecurityChecks)+36
  System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName   assemblyRef,证据assemblySecurity,RuntimeAssembly reqAssembly,   StackCrawlMark&stackMark,IntPtr,pPrivHostBinder,布尔值   throwOnFileNotFound,用于自检的布尔值,布尔值   hibitSecurityChecks)+152
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集安全性,StackCrawlMark和stackMark,IntPtr   pPrivHostBinder,用于自省的布尔值)+77
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据汇编安全性,StackCrawlMark和stackMark,布尔值   forIntrospection)+21 System.Reflection.Assembly.Load(字符串   assemblyString)+28
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔型starDirective)+38

     

[ConfigurationErrorsException:无法加载文件或程序集   “ System.IO”或其依赖项之一。参考程序集应   未加载执行。它们只能加载到   仅反射的加载程序上下文。 (来自HRESULT的异常:0x80131058)   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔型starDirective)+726
  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()   +196 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo   ai)+45
  System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection   compConfig)+172
  System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()   +91 System.Web.Compilation.BuildManager.CallPreStartInitMethods(字符串   preStartInitListPath,布尔值和isRefAssemblyLoaded)+111
  System.Web.Compilation.BuildManager.ExecutePreAppStart()+156
  System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager   appManager,IApplicationHost,appHost,IConfigMapPathFactory   configMapPathFactory,HostingEnvironmentParametershostingParameters,   PolicyLevel policyLevel,异常appDomainCreationException)+695

     

[HttpException(0x80004005):无法加载文件或程序集   “ System.IO”或其依赖项之一。参考程序集应   未加载执行。它们只能加载到   仅反射的加载程序上下文。 (来自HRESULT的异常:0x80131058)   System.Web.HttpRuntime.FirstRequestInit(HttpContext上下文)+659
  System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext上下文)+89   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest   wr,HttpContext上下文)+188

     

版本信息:Microsoft .NET Framework版本:4.0.30319;   ASP.NET版本:4.7.3160.0


当我查看fuslogvw时,出现以下错误作为最后一个错误:


  

*程序集活页夹日志条目(8/19/18 @ 12:10:13 PM)*

     

操作失败。绑定结果:hr = 0x80070002。系统无法   找到指定的文件。

     

装配管理器从以下位置加载:   C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll在   可执行C:\ Program Files(x86)\ Microsoft Visual   Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Roslyn \ VBCSCompiler.exe   ---详细的错误日志如下。

     

===预绑定状态信息=== LOG:DisplayName = System.Runtime.Loader,版本= 4.0.0.0,Culture = neutral,   PublicKeyToken = b03f5f7f11d50a3a(完全指定)LOG:Appbase =   文件:/// C:/ Program Files(x86)/ Microsoft Visual   Studio / 2017 / Professional / MSBuild / 15.0 / Bin / Roslyn / LOG:初始   PrivatePath = NULL日志:动态基础= NULL日志:缓存基础= NULL   日志:AppName = VBCSCompiler.exe调用程序集:   Microsoft.CodeAnalysis,版本= 2.9.0.0,文化=中性,   PublicKeyToken = 31bf3856ad364e35。   === LOG:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\ Program Files(x86)\ Microsoft   视觉效果   Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Roslyn \ VBCSCompiler.exe.Config   日志:使用主机配置文件:日志:使用机器配置   来自的文件   C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config。   日志:政策后参考:System.Runtime.Loader,版本= 4.0.0.0,   文化=中性,PublicKeyToken = b03f5f7f11d50a3a日志:GAC查找为   不成功。日志:尝试下载新的URL文件:/// C:/ Program   文件(x86)/ Microsoft Visual   Studio / 2017 / Professional / MSBuild / 15.0 / Bin / Roslyn / System.Runtime.Loader.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files   (x86)/ Microsoft Visual   Studio / 2017 / Professional / MSBuild / 15.0 / Bin / Roslyn / System.Runtime.Loader / System.Runtime.Loader.DLL。   日志:尝试下载新的URL文件:/// C:/ Program Files   (x86)/ Microsoft Visual   Studio / 2017 / Professional / MSBuild / 15.0 / Bin / Roslyn / System.Runtime.Loader.EXE。   日志:尝试下载新的URL文件:/// C:/ Program Files   (x86)/ Microsoft Visual   Studio / 2017 / Professional / MSBuild / 15.0 / Bin / Roslyn / System.Runtime.Loader / System.Runtime.Loader.EXE。

     

>日志:尝试的所有探测URL均失败。

有人有什么建议吗?

谢谢!

5 个答案:

答案 0 :(得分:1)

自升级到.Net Framework 4.7.2以来,我遇到了同样的问题。删除bin文件夹会使错误消失。

答案 1 :(得分:0)

对我有用的是删除bin和obj文件夹。然后清理并重建解决方案

答案 2 :(得分:0)

或者...这就是MONO所发生的事情-它们有一个“ binary-reference-assemblies”目录-这是我在我的项目中用于COM引用的目录。

链接正常,但运行时出现此错误...。

对我来说应该是显而易见的,但是-累了-花了我一段时间才注意到在其他子目录中创建了更大的二进制文件-一旦我选择了其中的一个(C:\ dev \ mono \ external \ illinker-test -is \ assets \ wasm \ BlazingPizza.Client \ bin \ Release \ netstandard2.0 \ dist_framework_bin \ Mono.Security.dll),一切开始正常工作。

如果有任何人像我一样筋疲力尽并且犯了同样的错误(我要处理7x14的sev 1问题,持续3个月...刚刚完成),我想我会发布此消息

答案 3 :(得分:0)

这是一个突然之间突然出现的严重问题。将api项目升级到netfx 4.7.2后,出现了这个问题。一切正常,一个早晨,当我想运行项目时,出现了错误。

这是我在查看所有其他答案之后所做的事情。

  1. 执行解决方案的干净构建操作
  2. 转到解决方案中的每个项目文件夹,包括测试项目,然后删除BIN和OBJ文件夹
  3. 如果需要,请清理packages文件夹(当您再次构建该文件夹时,它会还原),以防万一。
  4. 现在重新构建解决方案(基本上按照构建配置中的定义构建所有项目)
  5. 运行您的项目,它现在应该可以工作。

我假设您知道如何在Visual Studio中清理和重建解决方案。如果没有,那么可以通过Google快速搜索找到大量指南。

答案 4 :(得分:0)

这对我有用:

  1. Release/Debug/目录中删除所有二进制文件[1]
  2. 删除packages/目录
  3. 删除.vs/目录

然后重新构建解决方案。

[1]您可以使用以下保存为.bat文件的代码从解决方案中删除所有二进制文件: start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"