Советы по исправлению проблем с версиями DLL в .NET - PullRequest
4 голосов
/ 19 июля 2010

Я только что освоил основы NHibernate, и при рефакторинге моего доступа к данным и доменных уровней я подумал, что с таким же успехом могу стать милым и начать использовать внедрение зависимостей для слоя доступа к данным.Модульное тестирование, вот и мы!

Я подумал, что поскольку NHibernate использует множество dll Castle, я мог бы также использовать Castle Windsor для контейнера DI.Когда я запускал приложение, чтобы посмотреть, все ли работает, у меня возникла проблема с dll-ссылкой.

Поскольку я использую NHibernate 2.1.2.4000 , у меня уже есть ссылка на Castle.Core 1.1.0.0 .Однако версия Castle Windsor dll, которую я использую ( 2.1.0.0 ), говорит о том, что хочет Castle.Core 1.2.0.0 .

Я новичок в этой сумасшедшей маляреи из библиотеки с открытым исходным кодом.В общем, как мне узнать, что такое зависимости dll для чего-то заранее, и как мне найти версию Castle.Windsor, которая использует Castle.Core 1.1.0.0 , которая уже есть у меняесть?

В качестве альтернативы, как мне узнать, будет ли NHibernate работать с Castle.Core 1.2.0.0 , или он сломается?

Спасибо за вашу помощь.

Дэвид

Ответы [ 6 ]

2 голосов
/ 19 июля 2010

Существует новый проект с открытым исходным кодом, Refix , который был создан, чтобы помочь с этой самой проблемой.

Помогает несколькими способами:

  • Он «отражает» все проекты в вашем решении для выработки , если существует общий набор зависимостей, которые могут быть «согласованы» всеми проектами. Если это так, он может соответствующим образом обновить файлы вашего проекта.

  • Если нет, но некоторые версии DLL совместимы с другими версиями, он может автоматически обновлять ваши файлы конфигурации с соответствующими перенаправлениями сборки.

  • Он также выступает в качестве центрального хранилища для всех ваших различных сборок и их версий.

Этот проект новый и только в альфа-версии, но он, безусловно, функционален и определенно стоит посмотреть. Кроме того, автор (которого я знаю лично) очень заинтересован в том, чтобы получить отзывы и идеи о проекте.

ИМХО это стоит посмотреть.

1 голос
/ 19 июля 2010

Для краткосрочного решения используется перенаправление привязки сборки.

Лучшей альтернативой является компиляция NHibernate из исходного кода с использованием нужной версии Castle.

0 голосов
/ 19 июля 2010

Ну, очевидно, вы ничего не можете с этим поделать, поэтому я переключил NHibernate на использование Linfu вместо Castle для динамических прокси-серверов, и теперь я могу использовать более современную версию Castle.Core в своем решении. .

[Редактировать: есть ответы, которые я не видел, когда добавил это, что также может решить проблему.]

0 голосов
/ 19 июля 2010

Это может быть возможно при использовании перенаправления привязки сборки;подробности см. здесь .

0 голосов
/ 19 июля 2010

Ну ... вы можете справиться с проблемами версий ... или вы можете установить их все в GAC и перестать беспокоиться об этом.

Это упрощает процесс установки, но должно сработать.

0 голосов
/ 19 июля 2010

Я не думаю, что NH мог бы ссылаться на Castle.Core, у вас скорее противоположная ситуация: для активной записи, которая является частью проекта замка, нужна эта версия NH.Чтобы сделать ссылки согласованными, вы можете попробовать загрузить все сборки из семейства замков, чтобы они соответствовали новейшим версиям (Виндзор в вашем случае).Это потребует некоторого регрессионного тестирования и возможных проблем со сборкой.В качестве альтернативы вы можете перекомпилировать Windsor без требования конкретной версии Castle.Core, но, учитывая такое большое различие в версии, вы, вероятно, столкнетесь с множественными проблемами совместимости или даже проблемами сборки из-за изменения API.

...