GAC и управление версиями сборки

мне нужно развернуть несколько сборок в GAC. У меня только что было несколько вопросов о (моем) понимании GAC. действительно смущает меня.

Я хочу знать, в каких версиях менять сборку и версию файла. Какие возможны комбинации, при которых GAC dll будет заменяться установкой приложения. и базовое управление файлами GAC.

Я объясню свой вопрос, используя следующий пример для лучшего понимания GAC:

Предположим, у меня есть продукты A и B.

И A, и B относятся к myfile.dll, установленному в GAC.
(i) версия сборки: [1.0.0.0]
(ii) версия файла сборки: [2.0.0.0] (преднамеренно отличается, чтобы избежать путаницы)

  1. Предположим, у меня есть исправление ошибки, которое применяется в myfile.dll. Тогда какую версию мне изменить?

  2. Предположим, у меня есть новая версия A, скажем «ANEW». Затем какую версию следует изменить, чтобы A, B ANEW могли находиться рядом.

  3. предположим, если у меня установлена ​​«A» с myfile.dll, присутствующей в GAC, и теперь я пытаюсь установить «B», в которой есть gac dll с исправлениями ошибок ... затем, какие версии изменить, чтобы изменение отразилось в «A».

  4. то же, что и Q3, но изменение B не должно отражаться на «A».

  5. Предположим, что «A» установлен с myfile (1.0.0.0). Теперь предположим, что «B» устанавливается с моим файлом (1.x.y.z). Будет ли заменен файл GAC?

  6. Предположим, что «A» установлен с myfile (1.0.0.0). Теперь предположим, что «B» устанавливается с моим файлом (2.x.y.z).. будет ли заменен файл GAC?

  7. Предположим, что «A» установлен с myfile (1.0.0.0). Теперь предположим, что «B» устанавливается с моим файлом (1.0.0.0), предполагая, что версия не изменилась. Будет ли заменен файл GAC?

  8. Кроме того, как удаляются библиотеки GAC. Есть ли какие-либо критерии для удаления?

Я предполагаю, что вопросы немного сбивают с толку, но надеюсь, вы, ребята, понимаете, о чем я спрашиваю.

PS: Связано с этой темой net-assembly-dll-sharing-and-deploying


person Amitd    schedule 16.12.2009    source источник


Ответы (1)


1) Зависит от того, какие изменения вы вносите, чтобы исправить ошибку. Если вы измените какие-либо общедоступные интерфейсы или внесете существенные изменения в поведение, я бы увеличил номер версии сборки. Если нет, вы можете сделать то, что Microsoft делает с единственной версией файла.

2) Сборочная версия — это все, что волнует GAC. Поэтому, если вы хотите, чтобы две сборки с одинаковыми именами жили рядом, они должны различаться версией сборки.

3) Я бы, скорее всего, изменил номер версии сборки и включил политику издателя для перенаправления клиентов старой версии на новую.

4) То же, что и 3, но без политики издателя, или настройте A, чтобы обойти ее.

5) и 6) Нет, он установлен рядом.

7) Я так не думаю, но это может зависеть от того, отличаются ли они версией файла. Я уверен, что вы можете попробовать, чтобы проверить.

8) Есть ссылки, которые можно использовать для предотвращения случайного удаления. MSI использует это, поэтому, если вы используете MSI для установки, он отслеживает ссылки на сборку и не удаляет ее, пока не будут удалены все приложения. Если вы сделаете это вручную (скажем, с помощью Gacutil /uf), вы можете все испортить.

person Mattias S    schedule 17.12.2009
comment
Спасибо за ответ. Я также нашел эту ссылку blogs.msdn.com/junfeng/archive /2004/02/14/72666.aspx Когда мы видим, что сборка уже существует в GAC, мы пытаемся сравнить версию файла сборки в GAC (назовем ее «старой» сборкой) и версию файла сборки, которую предстоит установить (и «новая» сборка). Если версия файла «новой» сборки ниже версии «старой» сборки, мы откажемся от установки «новой» сборки, если только вы не попросите fusion выполнить принудительную установку («gacutil -if»). - person Amitd; 18.12.2009
comment
После этого ответа и некоторых исследований ... я получил ответы, спасибо :) [a] для параллельной установки в GAC всегда меняйте версию сборки. [b]для исправления ошибки всегда меняйте версию файла сборки. [c]более старая версия файла всегда заменяется более новой, если та же версия сборки. [d] чтобы принудительно заменить новую версию файла более старой версией файла (с учетом той же версии сборки), используйте принудительный флаг в gacutil. - person Amitd; 20.12.2009