6

在我的网络应用程序中,我使用的是NHibernate.dll。这依赖于以下程序集。

'Antlr3.Runtime,版本 = 3.1.0.39271,文化 = 中性,PublicKeyToken = 3a9cab8f8d22bfb7'

现在在同一个项目中,我必须引入Antlr3.StringTemplate.dll的另一个要求。它依赖于上述程序集的另一个版本。

如果我使用满足NHibernate的Antlr3.Runtime.dll版本,Antlr3.StringTemplate开始抱怨,反之亦然。

如何解决这样的情况?

4

4 回答 4

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>

这直接<configuration>位于 web.config 中的节点下。

你可以在这里阅读:http: //msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

于 2010-06-16T07:54:24.130 回答
4

最简单的方法是针对同一版本重新编译两者。或者,您可以从参考中删除版本规范(并将特定版本设置为 false)。

于 2010-06-15T16:44:31.020 回答
1

我们必须按照吉姆·兰姆的建议去做。我们构建了所有“第三方库”的本地版本(正如我们所称的那样),针对强名称和显式依赖项(与下载依赖于另一个的 dll 时可能获得的内容相比)。我们将这些本地构建提交到我们的存储库(Subversion)中。然后我们将生成的程序集放在依赖于这些程序集的每个项目的根目录下的“Dependencies/lib”文件夹中。这允许我们使用其相对路径定位功能将它们添加为 VS 引用。

于 2010-06-15T21:31:17.370 回答
1

我有同样的问题。

绑定重定向对您有用吗?

我试过这样,但没有任何改变:

<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 的解决方案。现在它完美地工作了。

于 2010-08-09T21:45:21.510 回答