Одним из решений (или обходного пути) было бы установить обе версии в Global Assembly Cache (GAC) на компьютерах, на которых должно работать ваше программное обеспечение, и ссылаться на сборки, используя их надежные имена. Это предполагает, что сборки действительно имеют строгие имена.
Установка в GAC будет проблематичной, если у вас более нескольких разработчиков или вы планируете развернуть свое решение на многих компьютерах (например, в качестве приложения для конечного пользователя). В этом случае я считаю (но я могу ошибаться), что ваш единственный вариант - объединить одну из двух версий в сборку, требующую эту версию. В вашем конкретном случае вам необходимо объединить Castle.DynamicProxy2.dll
v2.1 с NHibernate.dll
.
Вы можете использовать инструмент под названием ILMerge для объединения сборок. Команда, которую вам нужно будет выполнить, выглядит примерно так (не проверено):
ILMerge /t:library /internalize /out:Deploy/NHibernate.dll
NHibernate.dll Castle.DynamicProxy2.dll
Переключатель /internalize
указывает ILMerge пометить все типы из второй сборки (в данном случае Castle) internal
в выходной сборке. Без этого вы можете получить ошибки компиляции, когда попытаетесь скомпилировать проект, ссылающийся как на новую NHibernate.dll
, так и на полочную версию Castle.DynamicProxy2.dll
v2.2, поскольку они будут содержать классы с точно такими же именами.