2009-12-16 1 views
5

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

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

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

Пусть я есть продукты А и В.

И A, и B ссылаются на файл myfile.dll, установленный в GAC.
(я) версия сборки: [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 с исправлениями ошибок. Затем какие версии изменяются, чтобы изменения отражались в ' А».

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

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

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

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

  8. Также как удалены DLL GAC. Есть ли какие-либо критерии для удаления?

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

PS: Относящиеся к этой теме net-assembly-dll-sharing-and-deploying

ответ

4

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

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

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

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

5) & 6) Нет, он установлен бок о бок.

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

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

+1

THX для ответа. Я так же нашел эту ссылку http://blogs.msdn.com/junfeng/archive/2004/02/14/72666.aspx «Когда мы видим, что сборка уже существует в GAC, мы пытаемся сравнить версию файла из сборки в GAC (назовем ее «старой» сборкой) и файловой версии сборки, собирающейся установить (и «новую» сборку) .Если версия «новой» сборки меньше, чем «старая» сборка, мы откажемся от установки «новой» сборки, если вы не попросите фьюжн принудительно установить («gacutil -if») ». – Amitd

+1

После этого ответа и некоторых исследований .. я получил ответы ,, thx u :) [a] для бок о бок установка в GAC всегда меняет версию сборки. [b] для исправления ошибок всегда изменяйте версию файла сборки. [c] Более старая версия файла всегда заменяется более новой, если такая же версия сборки. [d] принудительно заменить новую версию файла более старой версией файла (с той же версией сборки) использовать флаг силы в gacutil. – Amitd