Если вы отправляете многоразовую библиотеку, состоящую из нескольких сборок, но лишь немногие из них образуют фасад, вы можете рассмотреть возможность установки сборок в GAC, если пакет установлен на ПК разработчика.
Представьте, что вы отправляете 6 сборок, и только одна из этих 6 сборок содержит фасад, т. Е. Остальные 5 используются только самим фасадом. Вы отправляете:
- MyProduct.Facade.dll - это единственный компонент, предназначенный для разработчиков
- MyProduct.Core.dll - используется MyProduct.Facade.dll, но не предназначено для разработчиков
- MyProduct.Component1.dll - тоже самое
- MyProduct.Component2.dll - тоже самое
- ThirdParty.Lib1.dll - сторонняя библиотека, используемая MyProduct.Component1.dll
- ThirdParty.Lib2.dll - тоже самое
- и т.д.
Разработчики, использующие ваш проект, хотели бы ссылаться только на MyProduct.Facade.dll в своих собственных проектах. Но когда их проект выполняется, он должен иметь возможность загружать все сборки, на которые он ссылается - рекурсивно. Как этого можно достичь? В общем, они должны быть доступны либо в папке Bin, либо в GAC:
- Вы можете попросить разработчиков найти вашу папку установки и добавить ссылки на все сборки N , которые вы там поместили. Это гарантирует, что они будут скопированы в папку Bin и будут доступны во время выполнения.
- Вы можете установить шаблон проекта VS.NET , уже содержащий эти 6 ссылок . Немного сложно, так как вы должны вставить фактический путь к вашим сборкам в этот шаблон до его установки. Это может сделать только установщик, поскольку этот путь зависит от пути установки.
- Вы можете попросить разработчиков создать специальный шаг после сборки в файле .csproj / .vbproj , скопировав необходимые зависимости в папку Bin. Те же недостатки.
- Наконец, вы можете установить все свои сборки в GAC . В этом случае разработчики должны добавить ссылку только на MyProduct.Facade.dll из своего проекта. В остальном все остальное будет доступно во время выполнения.
Примечание: последний вариант не заставляет вас делать то же самое при отправке проекта на рабочие ПК. Вы можете отправить все сборки в папке Bin или установить их в GAC - все зависит от вашего желания.
Таким образом, описанное решение демонстрирует преимущество использования сторонних сборок в GAC во время разработки. Это не относится к производству.
Как вы можете заметить, установка в GAC в основном предназначена для решения проблемы расположения требуемых сборок (зависимостей). Если сборка установлена в GAC, вы можете считать, что она существует «рядом» с любым приложением. Это похоже на добавление пути к .exe в переменную PATH, но «управляемым способом». - конечно, это довольно упрощенное описание;)