无法加载文件或程序集“Antlr3.Runtime(1)”或其某个依赖项

89

在尝试运行我的MVC4项目时,我遇到了这个错误。在其他机器上最后一次使用时它正常工作,但是当我尝试从另一台计算机运行它时,它会给我以下错误:

无法加载文件或程序集 'Antlr3.Runtime (1)' 或其其中一个依赖项。定位的程序集清单定义与程序集引用不匹配。(HRESULT 的异常:0x80131040)

在阅读了这里关于此问题的内容之后,我尝试了执行

Install-Package Antlr3.Runtime -Pre

但它没有帮助,有什么想法吗?


1
你在安装上述版本之前尝试卸载先前的版本了吗? - Spock
1
我没有更新任何版本,只是更换了机器。 - user971741
你尝试过右键点击解决方案,然后选择“启用NuGet软件包还原”吗? - T.S.
这里没有任何答案能提供帮助,但是这个重复的问题的答案可以。 - DCShannon
27个回答

105

当我试用免费的Nlog日志平台时,遇到了同样的问题。

以下方法对我有帮助:

在文件资源管理器中输入 %TEMP% 并删除所有临时文件。

之后,我在Visual Studio中启动我的MVC5项目时就没有遇到这个错误了。


我的错误信息没有“(1)”这个标记,但这个解决方案仍然有效。 - Roberto
13
谢谢这个。就是微软这种烂事有时候会让你想用拳头砸穿 Visual Studio 的肚子... - Smyrnian
太棒了!在这上面浪费了太多时间。我的问题不在于构建部分,而是在使用pubxml文件发布工件时,在Jenkins服务器上失败了,而在我的本地机器上却正常工作。一旦按照上述方法删除了临时文件夹,发布工件就可以无问题地工作了。 - yyardim

43

尝试删除ASP.Net的临时文件,可通过以下方式之一来实现:

  • 在文件资源管理器中输入“%TEMP%”,并删除所有临时文件。
  • 进入文件夹 “C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”,并删除其中所有文件。

7
谢谢。对我来说,帮助我的是选项2。 - Rabbi
我同意@Rabbi的观点。是选项2解决了我的问题。我希望我能给你的答案点赞10次!非常感谢。 :) - Annie Lagang

31

不要忘记清除Framework64中的临时ASP.NET文件。这对我很有帮助。

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files

非常感谢,我尝试了被接受的答案,但都无济于事,直到看到了这篇帖子,Framework64 对我很有帮助。 - Joshua Ohana
这适用于我的和另一个项目-dll引用。在我的情况下,Web项目中的所有引用都已损坏,消息是:“无法加载文件或程序集'whatever.dll'或其某个依赖项”。清理后,dll引用可以创建,一切正常运作。 - Fer R

29

这可能会对某些人有所帮助。
我在一个MVC 5应用程序中遇到了这个问题。从bin目录中删除Antlr3.Runtime.dll并重新构建即可解决该问题。


这对我有用。谢谢。但我仍然不确定这个错误的真正原因。有人能解释一下吗? - mukulsharma1146
1
在我的情况下,我不得不删除WebGrease.dll文件。 - Tharwen
谢谢...我花了3个小时来解决这个问题,而这一步骤让我摆脱了YSOD。 - Joshua K

18

我的问题是最新版的WebGrease安装了Antlr的3.4.1.9004版本。我安装了WebGrease后,将Antlr更新到了3.5.0.2版本,这个错误就消失了。


12
我的问题就是这个。我必须在“程序包管理器控制台”中通过卸载Microsoft.AspNet.Web.Optimization、WebGrease和Antlr(按照这个顺序),来解除依赖链,然后安装Microsoft.AspNet.Web.Optimization,更新WebGrease,最后更新Antlr(按照这个顺序)以获取最新版本和正确的Antlr版本。 - Wade

17

对我而言,在web.config文件中删除该节点后,错误消息消失了:

<identity impersonate="true" userName="" password="">

但是对我真正起作用的是授予指定在模拟中的用户名(impersonate)完全访问权限,这样可以访问在C:\Windows\Microsoft.NET\Framework{version}(或Framework64)下找到的“Temporary ASP.NET Files”文件夹。

身份标识也可能存储在IIS中的Web站点应用程序池设置中。

确保您的NuGet包已经正确安装,并且版本正确。如果其他方法都不起作用,尝试从本地文件夹重新添加引用并将其设置为复制本地。


1
这对我解决了问题。在staging环境中,web.config有一个模拟设置,而该用户帐户在我的开发环境中不存在。 - ttomsen
我尝试了所有三个建议,但都没有起作用。仍然出现YPOD错误。
  1. 我的web.config中没有<identity>标签。
  2. 我已经给予iis_usrs和users\johnny用户“完全控制”权限。
  3. 最后一个选项似乎是一种hack方法。
- dannyrosalex
我使用命令 ASPNET_REGIIS -GA impersonatedusername 解决了这个问题。 - cslecours
这有助于解决我的问题。我正在本地工作,而在此元素中提到的帐户名称无法访问我的开发文件夹。 - Aamol
谢谢,这个解决方案真的很有帮助。 - Josue Barrios

12

如果有任何解决方案可解决您的问题,请验证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>

谢谢。在更新软件包时遇到问题,这个答案对我很有帮助。 - fbarikzehy
我移除了这个程序集,然后它就可以工作了。谢谢! - User6667769

10

其中一种简单的方法是更新antlr和webgrease

  1. 进入Package控制台
  2. 然后逐个尝试应用以下代码
  3. PM>Update-Package Antlr
  4. PM>Update-Package WebGrease

最终错误得到解决


3

在web.config中,impersonate="true"出现了问题,我删除了这行后,它就可用了!!

然后我重新添加了这行,并将管理员权限授予具有模拟身份的帐户用户,我的整个应用程序都可以使用了 :)


2
如果您正在使用模拟身份,则需要给被模拟用户授予以下文件夹的访问权限:
  1. C:\Windows\Microsoft.NET\Framework[v4.0.30319或您正在使用的版本]\Temporary ASP.NET Files

  2. 您的站点目录。

此外,您可能需要创建以下文件夹:
C:\Windows\Microsoft.NET\Framework\[v4.0.30319 or the version that you're using]\Temporary ASP.NET Files\[Application-Name-Goes-Here]

但先尝试之前的方法,这对我有用。

为了让模拟用户有权限保存临时数据并从目录中获取dll文件和任何所需文件,需要进行两个更改。

更新,对于Windows 10,这是适合我的解决方案

我们将执行两个步骤,但是不要使用 C:\Windows\Microsoft.NET\Framework[v4.0.30319或您正在使用的版本]\Temporary ASP.NET Files

在文件资源管理器中输入%TEMP%,并授予模拟用户访问以下文件夹的权限: C:\Users\[UserName]\AppData\Local\Temp\Temporary ASP.NET Files


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