Можно ли добавлять/обновлять сборки в GAC через пакет Nuget?

Nuget, без сомнения, представляет собой чрезвычайно эффективную систему упаковки и распределения. Тем не менее, есть некоторые случаи, когда управление файлами сборки становится громоздким. Это особенно очевидно для веб-приложений, где многие (30+) под-приложения на сайте настроены для наследования ссылок. Единственная точка наследования желательна в моем случае из-за легкости, в которой библиотека может быть обновлена ​​для всех дочерних проектов. Для меня стало проблематично надежно хранить эти сборки в корневом каталоге. Чтобы помочь справиться с этим, я хотел бы использовать GAC для этих конкретных библиотек.

Есть ли способ установить/обновить эти библиотеки в GAC через пакет nuget script? Я всегда могу прибегнуть к традиционным средствам, но я хотел бы использовать Nuget для этого, если это возможно. Сборка будет добавлена ​​к серверу GAC, но цель пакета будет заключаться в том, чтобы позволить разработчикам легко установить сборку на свой локальный GAC и поддерживать ту же ссылку между локальными/серверными средами.

Ответ 1

Вы можете установить сборки в GAC с помощью PowerShell script из PowerShell GAC, поэтому ваш install.ps1 script может определенно сделайте это.

Однако слово предостережения оправданно; делать это, вероятно, не даст большинству людей такое поведение, которое они хотят. Каждый проект будет использовать сильную ссылку на конкретную версию. Просто потому, что один проект обновляет пакет, это не значит, что другие проекты будут обновлять свои пакеты и не будут использовать более новую версию в GAC - они будут использовать ту, к которой они привязаны, если сборка не содержит политику привязки, определяющую новая версия заменяет старую, и в этом случае версия, которую использует проект, не будет соответствовать версии, которую считает nuget.

Таким образом, может быть очень трудно понять, какая именно версия сборки используется. Обычно вы можете просто посмотреть на установленные пакеты nuget и сразу узнать, что у вас есть.

В моем случае мы используем nuget для хранения двоичных файлов вне Git, но некоторые из двоичных файлов включают конструктор WinForms, который очень сильно разозлится, если сборки не находятся в GAC. У нас были бесконечные проблемы снова и снова, пока мы просто не пустили пулю и не поставили сборки в GAC. Теперь он работает безупречно. Таким образом, мы регистрируем наши собственные пользовательские сборки в GAC через nuget, чтобы он автоматически загружал и регистрировал их, но у нас есть одно решение и гарантировать, что все проекты будут обновляться одновременно.