在我的网络应用程序中,我正在使用 NHibernate.dll 。这依赖于以下装配。
'Antlr3.Runtime,Version = 3.1.0.39271, 文化=中性, 公钥= 3a9cab8f8d22bfb7'
现在在另一个需求的同一项目中,我必须引入 Antlr3.StringTemplate.dll 。哪个依赖于上述程序集的另一个版本。
如果我使用满足 NHibernate 的 Antlr3.Runtime.dll 版本,则 Antlr3.StringTemplate 会开始抱怨,反之亦然。< / p>
如何解决这种情况?
答案 0 :(得分:5)
您可以在web.config中使用assemblyBinding将最新版本重定向到旧版本。
示例:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4"/>
<bindingRedirect oldVersion="2.1.0.4000" newVersion="2.1.2.4000"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
这直接位于web.config中的<configuration>
节点下。
你可以在这里阅读: http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx
答案 1 :(得分:4)
最简单的方法是针对同一版本重新编译两者。或者,您可以从引用中删除版本规范(并将特定版本设置为false)。
答案 2 :(得分:1)
我们必须做Jim Lamb建议的事情。我们构建了所有“第三方库”的本地版本(我们称之为“第三方库”),目标是强名称和明确的依赖关系(相对于下载依赖于另一个的dll时可能得到的内容)。我们将这些本地构建提交到我们的存储库(Subversion)。然后我们将生成的程序集放在依赖于这些程序集的每个项目的根目录下的“Dependencies / lib”文件夹中。这允许我们使用其相对路径位置功能将它们添加为VS引用。
答案 3 :(得分:1)
我遇到了同样的问题。
bindredirect是否为您服务?
我试过这样,但没有改变:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="3a9cab8f8d22bfb7" culture="neutral" />
<bindingRedirect oldVersion="*" newVersion="3.1.3.6002" />
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
出现了同样的错误。
所以我决定采用将旧版Antlr3.Runtime程序集添加到gac的解决方案。 现在它完美无缺。