Как переместить сборки из проекта развертывания, не прерывая ссылки на приложения? - PullRequest
5 голосов
/ 02 января 2011

Я недавно провела рефакторинг существующего кода многих своих приложений, и теперь я пытаюсь привести в порядок стороны развертывания.

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

Примечание: я много читал о GAC , но у меня нет опыта работы с ним, а также я прочитал несколько страшных историй, поэтому стараюсь найти простое решение на времяСущество.

Мне удалось установить сборки в папку Common Files, однако в результате ( типичный IT ) я сломал свое приложение!Если я копирую сборки обратно в папку приложения, это работает нормально, поэтому проблема, очевидно, связана с тем, как мое приложение ссылается на сборки.

Чтобы программа установки установила сборки в папку Common Files, я только что обновил свойство Folder каждой сборки в списке Detected Dependencies.Когда я сделал это, у меня возникли мысли, что установщик каким-то образом обновит мое приложение, чтобы оно просило их искать их в этой папке, но это, похоже, не так.

Что именно я здесь делаю неправильно?

Ответы [ 2 ]

1 голос
/ 13 января 2011

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

Вот пример архитектуры, в которой реализованы технологии, описанные в статьях MSDN, упомянутых внижняя часть этого ответа.

Пример. В приложении SOA у вас может быть несколько разных (Windows) сервисов.Услуги могут быть сбалансированы по нагрузке на нескольких серверах.На каждом сервере службы могут быть установлены в каталоге «Службы».Службы, находящиеся в каталоге «Службы», могут совместно использовать сборки из каталога (Common Files) «lib»:

\CompanyName
      \Services
           \Service1
           \Service2
           \Service3
      \lib

Каждая фактическая служба будет производной от класса Базовая служба, который будет использовать Утилиту сборки.Ваша сборочная утилита может быть настроена на систематический поиск сборок, что позволяет вам использовать общие / общие сборки.Важно то, что ваше приложение может работать с локальными сборками (в локальной разработке), но при развертывании использовать совместно используемые сборки.

В моем примере из реальной жизни у меня была роскошь иметь пользовательские сценарии сборки и развертывания.Подумайте о различных сценариях развертывания 1 из N сервисов.Вы всегда обновляете (Common Files) каталог 'lib'?Может ли служба работать с локальными сборками, отличными от сборок 'lib'?И т.д.

Я надеюсь, что это было полезно.Если ваша проблема заключается в получении стороннего установщика для правильного развертывания приложения, не обращайте внимания и назовите установщик.В противном случае приведенный пример / решение должно помочь: o)

Читайте тему на MSDN:


PS: у меня возникли проблемы при решении сборок для платформы Microsoft Unity.

0 голосов
/ 02 января 2011

Если вы хотите «ссылаться» на некоторые сборки из общей папки, это возможно во время разработки. Однако при развертывании каждого приложения должны быть установлены эти отдельные сборки.

Если во время выполнения несколько сборок совместно используют несколько сборок, то «этой общей папкой» является GAC.

...