我有一个与MEF和RavenBD的asp.net mvc4项目。
加载项目时会引发此异常:无法加载文件或程序集Antlr3.Runtime.dll
我发现RavenDB和WebGrease (与MVC4一起安装)都使用Antlr3。但WebGrease自带了自己的Antlr3 dll,由Microsoft签名- PublicKeyToken 31bf3856ad364e35
Antlr3默认PublicKeyToken为eb42632606e9261f。
RavenDB和WebGrease使用相同版本的Antlr3 3.3.1.7705
如何解决此问题?
发布于 2012-11-16 07:30:41
不幸的是,我没有找到一个解决方案来解决不同签名的相同版本的冲突依赖。
但好消息是,WebGrease的一位贡献者霍华德·迪尔金已经通过电子邮件回答了我的问题。以下是他的回应:
Hi Maxime -很抱歉你遇到了这个问题。我正在努力做一些事情来快速解决这个问题:
1)准备使用最新的antlr版本更新antlr包-将测试并推送到nuget.org
2)与WebGrease团队合作更改他们的NuGet包,使其不提供antlr.dll,而是采用包依赖-在与他们交谈时,他们并不知道包的存在。
这应该可以解决你遇到的dll地狱问题。希望这不会超过几个星期的假期。
谢谢,
_howard
发布于 2014-04-22 18:26:41
我也遇到了同样的问题,通过从我的计算机上删除所有项目,从服务器获取最新版本,并在项目加载后重新构建所有nuget依赖项来解决它。你可以试试这个,它对我很有效。
似乎一些nuget依赖项在卸载后会留下一些垃圾,这是为所有解决方案进行干净重建的唯一方法
发布于 2021-09-28 18:11:15
我试过其他答案了。我还尝试了恢复、升级、降级、重新安装WebGrease和Antlr包的许多组合。在运行时,我仍然使用LoaderExceptions抛出ReflectionTypeLoadException,它显示了已被替换的旧Antlr的版本号(3.4.1.9004)。
我还尝试了以下方法,我花了几天时间进行测试,但都没有解决问题:
清除引用上的temporary files.
最终起作用的是在web.config文件中添加绑定重定向。由于NuGet也没有更新旧版本的WebGrease,因此我将它们都替换为:
</runtime>
</assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>
<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>
</assemblyBinding>
</runtime>在重新编译和部署我的应用程序之后,它就摆脱了这些抱怨。
https://stackoverflow.com/questions/13297402
复制相似问题