Как я могу развернуть две разные версии одного и того же управляемого asp.net dll в производство?Или ... как мне лучше обойти это? - PullRequest
1 голос
/ 03 апреля 2012

Вот проблема.У меня есть две разные технологии, требующие драйверов для доступа к базе данных PostgreSQL.

  1. Telerik ORM (2011.2.x)
  2. Эльма (последний на момент написания этого вопроса)

Оба используют драйвер Npgsql, однако оба AFAIK используют две разные версии драйвера.

  • Elmah: Npgsql 2.0.6.0
  • Открытый доступ: Npgsql2.0.10.0 (я не уверен, как она загружает DLL, но она поставляется с тем, что я использую в настоящее время)

, а также:

  • оба драйвера, по-видимому, используют одну и ту же версию, хотя бы по количеству, Mono.Security.dll 2.0.0.0

Сейчас у меня запущен локальный проект, и похожеработая на обоих фронтах, то есть Open Access использует свой драйвер (вероятно, из GAC, поскольку я установил на свою рабочую машину установщик Telerik, но проект никогда не ссылался на драйверы PostgreSQL), и Elmah работает с его драйвером (упоминается в проекте).Вполне возможно, что Telerik, возможно, на самом деле использует драйвер Npgsql в проекте, но я не уверен, как проверить эту возможность.

Однако на производстве у меня нет драйверов Telerik, загруженных в GACУ меня все мои dll помещены в папку bin сайта.Обе библиотеки названы одинаково, и переименование старого драйвера не работает локально.

Поэтому мне интересно, что мне следует делать в этот момент.

Elmah - источник с открытым исходным кодомЯ знаю, что могу получить исходный код (вместо использования пакета NuGet) и изменить его, чтобы он ссылался на более новый драйвер.Но, честно говоря, я не хочу иметь дело с перекомпиляцией Elmah, если я хочу обновить Telerik.

Мне интересно, может быть, проблема только в том, что последняя версия Elmah связана с драйвером в гораздо более строгом режиме?чем мода должна быть?Я читал о различных формах линковки, но недостаточно, чтобы понять, о чем я говорю. Однако, если это так, то может быть лучше скомпилировать его так, что (возможно) ему понадобится только 2.0.x или что-то в этом роде.и использовать то, что доступно, вместо использования какой-либо абсолютной версии.

Возможно ли это? Есть еще лучший способ справиться с этим? Спасибо.

1 Ответ

2 голосов
/ 05 апреля 2012

Хотя я использовал пакеты Nuget для установки основных библиотек elmah и драйверов PostSQL, я закончил тем, что удалил ссылку на Npgsql в проекте и добавил следующие строки в веб-конфигурацию в элементе configuration / runtime / assemblyBinding:

        <dependentAssembly>
            <assemblyIdentity name="Npgsql"
                              publicKeyToken="5d8b90d52f46fda7"
                              culture="neutral" />
            <bindingRedirect oldVersion="2.0.6.0"
                             newVersion="2.0.10.0"/>
        </dependentAssembly>

Кажется, работает довольно хорошо.Конечно, предполагается, что новый драйвер обратно совместим со старым.Нет codeBase или ILMerge беспорядок.

...