簡體   English   中英

如何解決.Net中沖突的程序集?

[英]How to resolve conflicting assemblies in .Net?

在我的Web應用程序中,我使用的是NHibernate.dll 這依賴於下面的程序集。

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

現在在另一個需求的同一項目中,我必須介紹Antlr3.StringTemplate.dll 哪個依賴於上面程序集的另一個版本。

如果我使用滿足NHibernateAntlr3.Runtime.dll版本, Antlr3.StringTemplate會開始抱怨,反之亦然。

如何解決這樣的情況?

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

最簡單的方法是對同一版本重新編譯。 或者,您可以從引用中刪除版本規范(並將特定版本設置為false)。

我們不得不做Jim Lamb建議的事情。 我們構建了所有“第三方庫”的本地版本(我們稱之為“第三方庫”),目標是強名稱和明確的依賴關系(相對於下載依賴於另一個的dll時可能得到的內容)。 我們將這些本地構建提交到我們的存儲庫(Subversion)。 然后我們將生成的程序集放在依賴於這些程序集的每個項目的根目錄下的“Dependencies / lib”文件夾中。 這允許我們使用其相對路徑位置功能將它們添加為VS引用。

我有同樣的問題。

bindingredirect為你工作了嗎?

我試過這樣的,但沒有改變:

<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的解決方案。 現在它完美無缺。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM