Как разрешить конфликтующие сборки в .Net? - PullRequest
6 голосов
/ 15 июня 2010

В своем веб-приложении я использую NHibernate.dll .Это зависит от следующей сборки.

'Antlr3.Runtime, версия = 3.1.0.39271, культура = нейтральная, PublicKeyToken = 3a9cab8f8d22bfb7'

Сейчас в том же проектедля другого требования я должен ввести Antlr3.StringTemplate.dll .Который зависит от другой версии вышеупомянутой сборки.

Если я использую версию Antlr3.Runtime.dll , которая удовлетворяет NHibernate , Antlr3.StringTemplate начинает жаловаться и наоборот.

Как разрешить подобную ситуацию?

Ответы [ 4 ]

5 голосов
/ 16 июня 2010

Вероятно, вы можете использовать assemblyBinding в вашем web.config, чтобы перенаправить вашу последнюю версию на старую версию.

Пример:

<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

4 голосов
/ 15 июня 2010

Самое простое было бы перекомпилировать оба против одной и той же версии.Или вы можете удалить спецификацию версии из ссылки (и установить для конкретной версии значение false).

1 голос
/ 10 августа 2010

У меня была такая же проблема.

у вас работает привязка переадресации?

Я пробовал так, но ничего не изменилось:

<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.Теперь работает отлично.

1 голос
/ 16 июня 2010

Мы должны были сделать то, что предлагает Джим Лэмб. Мы создали локальные версии всех наших «сторонних библиотек» (как мы их назвали), нацеливаясь на строгие имена и явные зависимости (в отличие от того, что вы можете получить при загрузке библиотеки DLL, которая зависит от другой). Мы поместили эти локальные сборки в наш репозиторий (Subversion). Затем мы поместили получившиеся сборки в папку «Dependencies / lib» под корнем каждого из наших проектов, которые зависели от этих сборок. Это позволило нам добавить их в качестве ссылок VS, используя возможности определения относительного пути.

...