Определить ссылку .net, чтобы всегда использовать последнюю версию dll GAC?

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

Раньше я не слишком много работал с GAC, но считаю, что это может быть то, что мы ищем. Есть ли способ развернуть мою dll (ту, которую я предоставляю поставщику) в GAC и заставить поставщика построить свой проект .net таким образом, чтобы всегда получать последнюю версию из GAC?


person Lee Warner    schedule 06.01.2010    source источник


Ответы (2)


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

person Adam Robinson    schedule 06.01.2010

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

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

Существует несколько способов добиться этого, как описано в связанной статье. Наиболее распространенным является использование параметров в файле конфигурации приложения (если вы хотите повлиять только на это приложение) или в файле политики издателя (если вы хотите повлиять на все приложения, которые использовать общую сборку).

person Joe    schedule 06.01.2010
comment
По умолчанию любая сборка со строгой подписью (что необходимо сделать, чтобы поместить ее в GAC) привязывается к определенной версии, что нарушает это предложение. Поставщик должен будет установить для параметра SpecificVersion значение false, как я предложил в своем ответе. - person Adam Robinson; 07.01.2010
comment
... нарушая это предложение - нет, параметр SpecificVersion влияет на Visual Studio. Во время выполнения привязку сборки можно переопределить, несмотря на то, что при сборке была указана конкретная версия. - person Joe; 07.01.2010
comment
@Джо, можешь немного рассказать об этом? Если у меня есть проект A, который ссылается на стороннюю библиотеку X, могу ли я собрать A таким образом, чтобы он использовал последнюю доступную версию X во время выполнения без необходимости каждый раз писать конфигурации перенаправления привязки? - person Mr. TA; 25.05.2012
comment
@Мистер. TA, Если вы ссылаетесь на стороннюю сборку с помощью двоичной ссылки и используете Copy Local для ее копирования в выходной каталог вашего проекта, у вас всегда будет самая последняя версия. - person Joe; 25.05.2012
comment
@Joe Да, если я пересоберу свой проект. Что делать, если я не могу (или это сложно/требует много времени) перестроить мой проект? - person Mr. TA; 25.05.2012
comment
это решение решает очень сложный сценарий: вам нужно сослаться на dll A, для которого требуется определенная версия другой dll B. Но вам также нужно сослаться на более новую версию dll B из вашего кода. Мне любопытно, что произойдет, если вам придется ссылаться на две библиотеки DLL, зависящие от одной и той же библиотеки, но каждая из которых запрашивает другую конкретную версию. - person Radu Simionescu; 03.04.2013