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

问题描述 投票:4回答:3

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

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

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

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

我得到的例外情况如下。

描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.BadImageFormatException:无法加载文件或程序集“Antlr3.Runtime”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。

来源错误:

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

程序集加载跟踪:以下信息有助于确定无法加载程序集“Antlr3.Runtime”的原因。

警告:装配绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[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

.net iis .net-assembly
3个回答
5
投票

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

您可以找到该过程

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

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

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


2
投票

在我的例子中,代码在几个lib项目和一个Web应用程序中。每次我运行“rebuild all”并且它会没问题,而“build”单独的lib将导致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从服务器获取最新版本(顺便说一下,在哪里?)。但是它总是忘记更新旧项目,这些项目依赖于旧版本。


2
投票

我没有删除文件

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

© www.soinside.com 2019 - 2024. All rights reserved.