2010-05-09 2 views
2

Давайте предположим, у меня есть две сборки:версирования проблемы с узлами

MyExecutable.dll version 1.0.0 
MyClassLibrary.dll version 1.0.0 

Теперь MyExecutable.dll в настоящее время использует классы и методы (которые включают в себя некоторые алгоритмы) MyClassLibrary.dll «s. Большинство этих алгоритмов были выполнены в ходе, поскольку позже я захочу их доработать, если это необходимо. Это означает, что я не изменю interface этих классов, но сам код увидит некоторые изменения.

Вопрос в том, MyExecutable.dll будет ожидать MyClassLibrary.dll 1.0.0, и я хочу, чтобы он использовал версию 1.0.1 (или что-то в этом роде). Я не хочу перекомпилировать MyExecutable.dll (потому что на самом деле может быть более одного исполняемого файла, используя MyClassLibrary.dll). Есть ли решение этой проблемы? Я слышал о GAC, но, если возможно, я хотел бы держаться подальше от него.

Благодаря

ответ

2

Вы ищете Assembly Binding Redirection - это настраиваемый способ сказать .NET, какую версию сборки использовать.

+0

Если это применимо к .exe или .dll в этом случае? Я имею в виду, к какому конфигурационному файлу? –

+0

Конфигурация для чего-либо использует перенаправленную сборку - возможно, конфигурацию '.exe'. – Oded

+0

Но это означает, что каждый раз, когда мне приходится обновлять библиотеку, мне нужно будет проверить все остальные сборки, которые могут использовать эту библиотеку. Не было бы просто иметь конфигурационный файл в самой библиотеке, чтобы просто обновить библиотеку, файл конфигурации библиотеки и все? –

1

Первым решением является перенаправление привязки сборки, уже рекомендованное Oded.
Это выгодно, если у вас меньше .dll и вы хотите что-то сделать с его новыми версиями.

Второй вариант - создание отдельной сборки для интерфейсов и ссылка только на исполняемый файл.
Таким образом, вы можете разрешить третьим сторонам создавать материал против вашей библиотеки, не предоставляя им сборку точной библиотеки. (Например, они не могут декомпилировать его с помощью Reflector, поэтому он более безопасен таким образом.)
Пока сборка интерфейса не изменяется, вы можете изменить другие вещи в библиотеке в значительной степени, как хотите.