Подтвердить что ты не робот

Почему я не должен использовать GAC?

Было задано несколько вопросов по этой строке stackoverflow, таких как Каковы преимущества и недостатки использования GAC и Когда и когда - не устанавливать в GAC?, и несколько человек попросили его на web expamle. Я не могу привести убедительных аргументов в пользу использования GAC. Я уверен, что я наивна, но это похоже на то, что при использовании GAC больше преимуществ (например, производительности и контроля версий) больше не используется.

Почему я не должен использовать GAC?

4b9b3361

Ответ 1

Крис Селлс, вероятно, дает лучшую причину избегать GAC, где вы можете:

Это сводится к тому, что любое из общих мест для обновлений, будь то COM CLSID, windows\system32 или GAC, опасны и их следует избегать. И именно поэтому предпочтительным сценарием развертывания .NET является "развертывание xcopy", то есть наличие собственной закрытой копии каждой библиотеки DLL, которую вы тестируете и внедряете вместе с остальной частью вашего приложения.

"Ага!" ты говоришь. "GAC поддерживает несколько версий сборки! Когда foo.dll обновляется до v1.1, v1.0 располагается рядом с ним, чтобы ваше приложение не сломалось!" Конечно, это абсолютно верно. Но если это так, почему тебя это волнует? Я имею в виду, если есть новая сборка, но ваше приложение не подхватывает ее, какая разница?

"Ага, опять же, говорите вы." Я могу поместить политику GAC в GAC вместе со своей сборкой, чтобы приложения обновлялись автоматически! "Это тоже верно, но теперь, как и любая из старых стратегий замены кода на уровне машины Вы взяли на себя ответственность за огромную ответственность: убедитесь, что почти 0% приложений, известных вам или нет, не сломались. Это огромная ответственность, которая занимает у MS сотни человеко-лет на каждый новый выпуск .NET Framework. И даже несмотря на эти сотни человеко-лет тестирования, мы все еще не всегда понимаем это правильно. Если это обязанность тестирования, с которой вы готовы жить, я восхищаюсь вами. Лично у меня нет моральной стойкости, чтобы нести это бремя.

Ответ 2

У нас есть приложение с 50+ сборками .NET, загруженное в любой момент времени, и мы не используем GAC. Я думаю, что GAC наиболее полезен, если вам нужно одновременно запускать несколько версий вашего приложения, каждый из которых должен загружать другую версию той же общей библиотеки.

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

Я всегда чувствовал, что гораздо полезнее для кого-то, кто делает SDK/API, где различные версии их SDK могут загружаться несколькими приложениями и жить в гармонии. Итак, если вы находитесь в этой лодке, тогда GAC может иметь смысл.

Есть некоторые случаи, которые требуют GAC (я думаю, что компоненты .NET COM + должны быть в GAC в некоторых случаях), но я думаю, что это небольшой процент случаев.

Ответ 3

Если вам требуется менее навязчивое развертывание вашего приложения. Просто устанавливая в свой каталог приложения, вы можете легко скопировать развертывание и очистить.

Ответ 4

Если у вас небольшое приложение, которое не является ресурсоемким, тогда я не хочу устанавливать файлы в GAC.

Это создаст другую зависимость, которую мне нужно будет проверить в моей деинсталляции, и в прошлом было много печали о программах, которые злоупотребляют реестром.

Также было бы немного легче отлаживать/обслуживать, поскольку вы могли бы легко убедиться, что все соответствующие библиотеки находятся в исполняемом пути приложения.

Ответ 5

Я спросил что-то подобное (Мне действительно нужно использовать глобальный кэш сборок (GAC)?)

Лучший ответ заключался в том, что "GAC полезен, если вы регистрируете библиотеки, которые собираетесь использовать повторно".

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

Ответ 6

Что такое использование GAC?

i) Вы можете хранить несколько версий одной и той же сборки на машине и выполнять их рядом друг с другом. ii) Храните те же сборки в нескольких местах на машине, используя дополнительное ненужное хранилище. Сохранение их в одном месте снижает эту стоимость. iii) Обслуживание сборок на машине упрощается, потому что вам нужно только обновить одно местоположение (GAC), а не искать несколько экземпляров сборки, хранящихся на машине.

Ответ 7

Иногда на размещенных веб-сайтах у вас нет контроля над GAC, и некоторые хостинг-провайдеры не позволят вам устанавливать какие-либо сборки в GAC. Я столкнулся с этим раньше, и это огромная боль.