代码之家  ›  专栏  ›  技术社区  ›  Amitabh

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

  •  6
  • Amitabh  · 技术社区  · 16 年前

    在我的Web应用程序中,我正在使用 NHiBNATE.DLL . 这依赖于以下组件。

    'antlr3.runtime,版本=3.1.0.39271, 文化=中性, publickeytoken=3A9CAB8F8D22FB7'

    现在在同一个项目中,为了另一个需求,我必须介绍 antlr3.stringtemplate.dll文件 . 它依赖于上述程序集的另一个版本。

    如果我使用的是 antlr3.runtime.dll(运行时.dll) 满足 NHiBiNATE , antlr3.stringTemplate 开始抱怨,反之亦然。

    如何解决这种情况?

    4 回复  |  直到 16 年前
        1
  •  5
  •   jishi    16 年前

    您可以在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

        2
  •  4
  •   Jim Lamb    16 年前

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

        3
  •  1
  •   Donnie Hale    16 年前

    我们必须按照吉姆·兰姆的建议去做。我们构建了所有“第三方库”(我们称之为“第三方库”)的本地版本,以强名称和显式依赖项为目标(与下载依赖于其他库的DLL时可能获得的结果相反)。我们将这些本地构建提交到我们的存储库(Subversion)中。然后,我们将生成的程序集放在依赖于这些程序集的每个项目根目录下的“dependencies/lib”文件夹中。这允许我们使用其相对路径位置功能将它们作为vs引用添加。

        4
  •  1
  •   memical    16 年前

    我也有同样的问题。

    装订老师为你工作了吗?

    我这样试过,但没什么变化:

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

    出现了相同的错误。

    所以我决定采用将旧版本antl3.runtime程序集添加到GAC的解决方案。 现在它工作得很好。