DLL Hell issues: присвоение строгих имен

У меня есть две библиотеки DLL, app1.dll и app2.dll, которые используют одну и ту же третью dll, util.dll, которая может иметь немного другое поведение при создании для конкретного приложения.

Я хочу добиться того, чтобы app1.dll и app2.dll были изолированы в зависимости от используемых ими версий util.dll. В MSDN я прочитал, что решением является присвоение util.dll строгого имени, т.е. что это строгое имя содержит имя и версию dll, а также отпечаток пальца из-за подписи.

Сейчас я создаю util.dll ...

  • для app1 с KeyFileApp1.snk и версией 1.0.0.1
  • для app2 с KeyFileApp2.snk и версией 1.0.0.2

и это работает на целевой машине при развертывании приложений с соответствующей сборкой util.dll.

Однако у меня есть некоторые неясности:

  1. Достаточно ли будет всегда создавать util.dll с версией 1.0.0.0, но с разными ключевыми файлами для обоих приложений и иметь оба приложения, в конце концов, используя правильную dll?
  2. Учитываются ли строгие имена только при помещении библиотеки DLL в глобальный кеш сборок или также при ее использовании в качестве частной сборки?

person McMannus    schedule 30.01.2014    source источник
comment
На вашем месте я бы определенно различал две версии util.dll по номеру версии (не обязательно должен быть основным), иначе вы просите ад dll, как вы упомянули в заголовке.   -  person Grzenio    schedule 30.01.2014


Ответы (1)


  1. да, вы можете иметь и то, и другое с тем же именем и версией, но с другим открытым ключом. Хорошее / ремонтопригодное решение - решать вам. Скорее всего, запутает больше людей, чем вы хотите. Т.е. ни один обычный человек не сможет сказать вам «открытый ключ», используемый DLL, но большинство людей могут щелкнуть правой кнопкой мыши и проверить детали, чтобы увидеть версию (если вы правильно установили ее в своих сборках).

  2. строгое имя всегда считается. Обратите внимание, что если у вас есть локальная копия и копия GAC, GAC будет всегда использоваться, если версия в GAC приемлема.

Примечания:

  • строгие имена являются «вирусными», поскольку вы не можете иметь строго именованную сборку, зависящую от сборки без строгого имени. Будьте осторожны, так как вам понадобится много, чтобы ваши сборки были строго подписаны (что само по себе неплохо) и имели хороший план управления версиями.
  • вы можете в конечном итоге получить несколько версий одной и той же сборки, загруженных в процесс - либо подготовьтесь к этому, либо используйте политику издателя, чтобы сопоставить все версии с последней.
person Alexei Levenkov    schedule 30.01.2014