无法加载文件或程序集'Antlr3.Runtime'或其某个依赖项。

4

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

无法加载文件或程序集“Antlr3.Runtime”,或者其中的一项依赖项。此程序集是由比当前加载的运行时新的运行时构建的,因此无法加载

我只在IIS中遇到这个错误。我正在尝试部署到IIS 7.5。我将应用程序池设置为4.0,集成。

之前一切正常。在安装框架4.5和VS 2012 express后,我使用 MachineKeyCryptography 时出现异常。因此,我卸载了4.5框架和VS 2012,导致出现了这种混乱情况。

我收到的异常如下。

描述:在当前Web请求的执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及其在代码中的来源。
异常详细信息:System.BadImageFormatException: 无法加载文件或程序集“Antlr3.Runtime”或其依赖项之一。该程序集是由当前加载的运行时更新的运行时构建的,因此无法加载。
源错误:
在当前Web请求的执行过程中生成了一个未处理的异常。您可以使用下面的异常堆栈跟踪识别异常的起源和位置。
程序集加载跟踪:
以下信息可帮助确定为什么无法加载程序集“Antlr3.Runtime”。
WRN:已关闭程序集绑定日志记录功能。 若要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion! EnableLog](DWORD)设置为1。注意:启用程序集绑定失败日志记录会带来一些性能损失。 要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion! 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, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +416 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +166 System.Reflection.Assembly.Load(String assemblyString) +35 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +190
[ConfigurationErrorsException:无法加载文件或程序集“Antlr3.Runtime”或其依赖项之一。该程序集是由当前加载的运行时更新的运行时构建的,因此无法加载。] System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean 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 context) +11338038 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +88 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4356276

3个回答

6
您需要更改IIS中运行时版本。右键单击虚拟目录并点击高级设置,将其更改为正确的池设置。我可以说,在重新安装后,您的池设置不正确。
您可以按以下步骤进行操作:
在应用程序池中->选择您的站点->设置应用程序池默认值->选择您的正确版本
如果这样做不起作用,此时您可以执行的首选操作是从系统中卸载所有与框架4有关的.Net安装文件。清理您的系统,然后重新安装所有内容。
但我发现您正在使用IIS 7.5,因此会发生许多功能性更改,并且需要仔细处理。在尝试重新安装之前,您可以尝试设置应用程序池和其他设置。

3

我没有删除

1. temp (%TEMP%) 文件夹中的文件
2. 也没有删除 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件,以解决我的问题。错误的主要原因是所引用的 'Antlr3.Runtime' 版本与 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


根据显示的错误日志,似乎采取这种更合适的行动,并且它有所帮助。 - Rohit Verma

3
在我的情况下,代码分布在几个库项目和一个Web应用程序中。每次我运行“重新构建全部”都没问题,但是“构建”单独的库会导致Antlr3.runtime错误。
我仔细检查了所有依赖项。结果发现有两个版本的Antlr3.runtime。
为了解决这个问题:
  1. 使用“ctrl + ;”在解决方案资源管理器中搜索“Antlr3”。如果找到多个,请继续;或者可能是由Maverick上面提到的其他原因引起的。
  2. 右键单击其中一个,单击“定位到程序集浏览器”。列表中应该有多个具有不同版本的Antlr3.runtime。
  3. 返回解决方案资源管理器,删除所有旧的依赖项。
  4. 在解决方案资源管理器中,右键单击已删除项目的依赖项,添加依赖项。在以下参考管理器窗口中,在底部单击“浏览”。
  5. 依赖项在一个名为“/Your solution folder/packages”的文件夹中(它应该由NuGet创建)。在那里,您将看到至少2个具有不同版本的Antlrs3.runtime文件夹。选择最新的一个。
令我惊讶的是,有许多其他具有相同名称但不同版本的文件夹。在解决Antlr3问题后,另一个Newtonsoft.Json也出现了同样的问题,并以相同的方式解决。
我认为,在我们“允许NuGet下载缺少的包”(工具/选项/程序包管理器/常规)之后,当一个新项目需要一个包时,NuGet会从服务器获取最新版本。但它总是忘记更新旧的项目,这些项目具有旧版本的依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接