无法加载文件或程序集“Antlr3.Runtime”或其依赖项之一

时间:2014-02-07 14:38:08

标签: .net iis .net-assembly

我发现了一个类似的问题,但没有解决我的问题。

  

无法加载文件或程序集' Antlr3.Runtime'或其中一个   依赖。此程序集由比运行时更新的运行时构建   当前加载的运行时并且无法加载

我只在IIS中收到此错误。我试图部署到IIS 7.5。我将应用程序池设置为4.0,Integrated。

早些时候一切正常。安装框架4.5 VS 2012 Express后,我使用MachineKeyCryptography获得了异常。所以我卸载了4.5框架和VS 2012,因为这个混乱正在发生。

我得到的例外情况如下。

  

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.BadImageFormatException:无法加载文件   或者组装' Antlr3.Runtime'或其中一个依赖项。这个集会   由比当前加载的运行时更新的运行时构建   无法加载。

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

装配加载跟踪:以下信息可能对您有所帮助   确定装配的原因' Antlr3.Runtime'无法加载。

     

警告:装配绑定日志记录已关闭。要启用程序集绑定   失败日志记录,设置注册表值   [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1.注意:有   与程序集绑定失败相关的一些性能损失   日志记录。要关闭此功能,请删除注册表值   [HKLM \ SOFTWARE \微软\融合!EnableLog]。

     

堆栈追踪:

     

[BadImageFormatException:无法加载文件或程序集   ' Antlr3.Runtime'或其中一个依赖项。这个组件是由   比当前加载的运行时更新的运行时,不能   已加载。] System.Reflection.Assembly._nLoad(AssemblyName fileName,   String codeBase,Evidence assemblySecurity,Assembly locationHint,   StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean   forIntrospection)+0
  System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+416
  System.Reflection.Assembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+166 System.Reflection.Assembly.Load(String   assemblyString)+35
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+190

     

[ConfigurationErrorsException:无法加载文件或程序集   ' Antlr3.Runtime'或其中一个依赖项。这个组件是由   比当前加载的运行时更新的运行时,不能   加载]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+11244040
  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()   +388 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo   ai)+232
  System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()+48
  System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection   compConfig)+210
  System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath   configPath,Boolean supportLocalization,String outputAssemblyName)   +76 System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean   isPrecompiledApp)+283
  System.Web.Compilation.BuildManager.CompileGlobalAsax()+50
  System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()+676

     

[HttpException(0x80004005):无法加载文件或程序集   ' Antlr3.Runtime'或其中一个依赖项。这个组件是由   比当前加载的运行时更新的运行时,不能   加载]
  System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()   +76 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()   +1012 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager   appManager,IApplicationHost appHost,IConfigMapPathFactory   configMapPathFactory,HostingEnvironmentParameters hostingParameters)   1025

     

[HttpException(0x80004005):无法加载文件或程序集   ' Antlr3.Runtime'或其中一个依赖项。这个组件是由   比当前加载的运行时更新的运行时,不能   已加载。] System.Web.HttpRuntime.FirstRequestInit(HttpContext   上下文)+11338038
  System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+88   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest   wr,HttpContext context)+4356276

3 个答案:

答案 0 :(得分:5)

你需要在IIS中更改它的运行时版本。 右键单击虚拟目录 并单击高级设置 将其更改为正确的池设置。我可以说重新安装后你的游泳池设置不正确。

您可以找到该程序

  

在应用程序池中 - >选择您的网站 - >设置应用程序池   默认值 - >选择正确的版本

如果这不起作用,此时您可以做的首选是从系统引用框架中卸载所有.Net安装4.清理系统,然后重新安装所有内容。

但我发现你使用的是IIS 7.5。因此,您可以发现许多功能变化,需要谨慎处理。在尝试重新安装之前,您可以尝试设置应用程序池和其他设置。

答案 1 :(得分:2)

在我的例子中,代码在几个lib项目和一个Web应用程序中。每次我跑步"重建所有"它会好的,而#34; build"单独的lib将导致Antlr3.runtime错误。

我仔细检查了所有依赖项。原来,有两个版本的Antlr3.runtime。

解决问题:

  1. 使用" ctrl +;"搜索" Antlr3"在解决方案浏览器中。如果找到多个,继续;或者它可能是由Maverick上面提到的其他一些原因造成的。
  2. 右键单击其中一个,单击"在程序集资源管理器中找到"。应该有多个Antlr3.runtime,列表中包含不同的版本。
  3. 返回解决方案资源管理器,删除所有旧的依赖项。
  4. 在解决方案资源管理器中,右键单击已删除项目的依赖项,添加依赖项。在以下参考管理器窗口中,单击"浏览"在底部。
  5. 依赖项位于文件夹" /您的解决方案文件夹/包" (它应该由NuGet创建)。在那里,您将看到至少2个具有不同版本的Antlrs3.runtime文件夹。选择最新的。
  6. 令我惊讶的是,还有许多其他文件夹具有相同的名称和不同的版本。在我解决了Antlr3问题之后,另一个Newtonsoft.Json导致了同样的问题,并以同样的方式修复。

    我想在我们"允许Nuget下载丢失的包" (工具/选项/包管理器/常规),当一个新项目需要一个包时,NuGet从服务器获取最新版本(顺便说一下,在哪里?)。但是它总是忘记更新旧版本的旧项目。

答案 2 :(得分:2)

我没有删除

中的文件

1。 temp (%TEMP%)文件夹
  2。 也不是C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET文件 解决我的问题。出错的主要原因是' Antlr3.Runtime' references与web.config中引用的引用不同。

 <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>

解决方案是更新到Antlrs.Runtime的最新版本3.5.0.2