Вопрос: Когда я должен развернуть свои сборки в GAC?
Ответ: Никогда
Фактический, честный, реальный ответ: Едва ли
Обсуждение
Перетаскивать вещи в GAC только тогда, когда несколько приложений на машине будут использовать сборку, и когда сборка является основополагающей (вероятно, будет использоваться несколькими приложениями), когда она подписана и когда вы почти никогда не будете обновлять эту сборку. сборка. Может быть, добавьте к этому, когда использование нескольких независимых версий DLL, развернутых с каждым приложением, будет на самом деле вредно.
Пример последнего: предположим, что у вас есть 2 независимых приложения, независимо разработанных и развернутых независимо друг от друга. Тем не менее, существует вероятность того, что они будут взаимодействовать. Они будут обмениваться ... чем-то ... через .NET Remoting на локальной машине. Если у вас есть одна сборка в GAC, эти приложения будут уверены, что взаимодействие будет просто работать. Однако, если у каждого из них есть отдельная версия сборки, они не смогут обмениваться объектами. Это настолько редкое явление, что вам, вероятно, это не нужно. Если вы не уверены, то вам это не нужно.
Базовый сценарий GAC - это библиотека базовых классов .NET. Эти сборки поставляются Microsoft. Они авторитетны. Они являются основополагающими. и подписано. Они редко меняются. Все приложения должны использовать одинаковые копии этих библиотек DLL. Следовательно, они принадлежат GAC.
Напротив, ваши библиотеки DLL приложений не принадлежат Microsoft, они не являются основополагающими и, вероятно, не подписаны. Они меняются чаще, и есть только несколько приложений (может быть, только одно!), Которые используют каждую DLL. Нет GAC.
Я мог бы представить аппаратное устройство, скажем, цифровую камеру, которое устанавливает сборку .NET для обеспечения возможности программирования. Это сценарий, в котором сборка может хорошо вписаться в GAC. Это позволяет произвольным приложениям .NET получать программный доступ к цифровой камере.
Ваш пример log4net, на мой взгляд, не достаточен, чтобы оправдать помещение сборки в GAC. Представьте себе сценарий, когда одно из приложений получает обновление, и в качестве части обновления оно использует новую версию log4net. Что теперь? Следует ли поместить новую сборку log4net в GAC? Возможно нет.
Вся идея совместного использования DLL между приложениями была основана на предпосылке, что памяти и дискового пространства было мало. Когда-то это было правдой. Это больше не правда. Если есть сомнения, не используйте GAC.