18

我有一个带有 MEF 和 RavenBD 的 asp.net MVC 4 项目。

项目加载时会引发此异常:无法加载文件或程序集 Antlr3.Runtime.dll

我发现 RavenDB 和 WebGrease(随 MVC 4 一起安装)都使用 Antlr3。但是 WebGrease 带有自己的 Antlr3 dll,由微软签名 - PublicKeyToken 31bf3856ad364e35

Antlr3 默认的 PublicKeyToken 是 eb42632606e9261f。

RavenDB 和 WebGrease 使用相同版本的 Antlr3 3.3.1.7705

我该如何解决这个问题?

4

3 回答 3

7

不幸的是,我没有找到解决具有不同签名的相同版本的冲突依赖项的解决方案。

但好消息是,WebGrease 的贡献者之一,Howard Dierking,已经通过电子邮件回答了我的担忧。这是他的回应:

嗨马克西姆——很抱歉你遇到了这个。我正在努力做几件事来快速解决这个问题:

1) 使用最新的 antlr 版本准备 antlr 包的更新——将测试并推送到 nuget.org

2) 与 WebGrease 团队合作更改他们的 NuGet 包,使其不发送 antlr.dll 而是接受包依赖项——在与他们交谈时,他们不知道存在包。

这应该可以解决您遇到的 dll 地狱问题。希望假期不会超过几周。

谢谢,

_霍华德

于 2012-11-15T23:30:40.703 回答
1

我遇到了同样的问题,并通过从我的计算机中删除所有项目、从服务器获取最新版本并在项目加载后重建所有 nuget 依赖项来解决它。你可以试试这个,它对我有用。

似乎某些 nuget 依赖项在卸载后会留下一些垃圾,这是对所有解决方案进行干净重建的唯一方法

于 2014-04-22T10:26:41.130 回答
1

我尝试了其他答案。我还尝试了多种恢复、升级、降级、重新安装 WebGrease 和 Antlr 软件包的组合。在运行时,我仍然收到与 LoaderExceptions 一起引发的 ReflectionTypeLoadException,它显示已被替换的旧 Antlr 的版本号 (3.4.1.9004)。

我还尝试了以下方法,这花了我几天时间进行测试,但都没有解决问题:

  • 清除临时文件。
  • 重新加载 Visual Studio 和解决方案。
  • 重新启动我的开发计算机。
  • 删除参考上的“特定版本”标志。

最终奏效的是在 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>

重新编译和部署我的应用程序后,它摆脱了抱怨。

于 2021-09-28T18:11:14.757 回答