如何解决 .Net 中冲突的程序集?

发布于 2024-09-05 22:51:38 字数 431 浏览 9 评论 0原文

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

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

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

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

遇到这样的情况该如何解决呢?

In my web application I am using NHibernate.dll. This has a dependency on folowing assembly.

'Antlr3.Runtime, Version=3.1.0.39271,
Culture=neutral,
PublicKeyToken=3a9cab8f8d22bfb7'

Now in the same project for another requirement I have to introduce Antlr3.StringTemplate.dll. Which has a dependency on another version of the above assembly.

If I use the version of Antlr3.Runtime.dll which satisfies NHibernate , Antlr3.StringTemplate starts complaining and vice-versa.

How to resolve a situation like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心在旅行 2024-09-12 22:51:38

您可能可以在 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 中的 节点下。

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

You could probably use assemblyBinding in your web.config to redirect your newest version to the old version.

Example:

<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>

This goes directly under the <configuration> node in your web.config.

You can read bout it here:
http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

诗笺 2024-09-12 22:51:38

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

The simplest thing would be to recompile both against the same version. Or, you could remove the version specification from the reference (and set specific version to false).

云醉月微眠 2024-09-12 22:51:38

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

We had to do what Jim Lamb suggests. We built local versions of all our "3rd party libraries" (as we dubbed them), targeting strong names and explicit dependencies (versus what you might get when you download a dll that depends on another). We committed these local builds into our repository (Subversion). Then we placed the resulting assemblies in a "Dependencies/lib" folder under the root of each of our projects which depended on those assemblies. This allowed us to add them as VS references using its relative path location capabilities.

别低头,皇冠会掉 2024-09-12 22:51:38

我有同样的问题。

绑定重定向对你有用吗?

我已经尝试过这样的操作,但没有任何改变:

<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 的解决方案。
现在它工作得很好。

i had the same problem.

did the bindingredirect work for you?

i have tried it like this, but nothing changed:

<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>

Same error appeared.

So i decided to go with the solution of adding the old version Antlr3.Runtime assembly to gac.
Now it works perfectly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文