Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Каковы преимущества и недостатки использования GAC?
И кроме того, есть ли случаи, когда нужно использовать глобальный кэш assembly или когда его нельзя использовать?
- Загрузка сборок из GAC означает меньшую нагрузку и безопасность, что ваше приложение всегда будет загружать правильную версию библиотеки .NET
- Вы не должны использовать сборки ngen, которые находятся за пределами GAC, потому что там почти не будет прироста производительности, а во многих случаях даже потери производительности.
- Вы уже используете GAC, потому что все стандартные сборки .NET на самом деле находятся в GAC и ngened (во время установки).
- Использование GAC для ваших собственных библиотек добавляет сложности в deployment, я бы постарался избежать этого любой ценой.
- Ваши пользователи должны быть зарегистрированы как администраторы во время установки, если вы хотите поместить что-то в GAC, что довольно проблематично для многих типов приложений.
Итак, чтобы суммировать все это, начните с простого, и если позже вы увидите значительный прирост производительности, если вы поместите свои сборки в GAC и NGEN их, идите на это, иначе не беспокойтесь. GAC больше подходит для фреймворков, где есть ожидание, что библиотека будет разделена между большим количеством приложений, в 99% случаях она вам не нужна.
Преимущество:
- Только одно место для обновления вашей сборки
- Вы используете немного меньше места на жестком диске
Недостаток:
- Если вам нужно обновить только один сайт, вы не можете. вы можете закончить с другими сайтами в webserver сломанных
Рекомендация: оставьте от GAC до MS и друзей. Гигабайт сейчас стоит очень дешево.
GAC также может использоваться сборками, которым требуются повышенные разрешения для выполнения привилегированных операций от имени менее доверенного кода (например, приложения с частичным доверием ASP.NET).
Например, предположим, что у вас есть приложение с частичным доверием ASP.NET, которое должно выполнить задачу, требующую повышенных привилегий, т. е. полного доверия . Решение состоит в том, чтобы поместить код, требующий повышенных привилегий, в отдельный assembly. assembly помечается атрибутом AllowPartiallyTrustedCallers , А класс, содержащий привилегированную логику, помечается атрибутом PermissionSet, примерно так:
[PermissionSet(SecurityAction.Assert, Unrestricted=true)]
Нашему assembly будет дано строгое имя (подписано), а затем развернуто в GAC.
Теперь наше частично доверенное приложение(ы) может использовать доверенный assembly в GAC для выполнения определенного и узкого набора привилегированных операций, не теряя преимущества частичного доверия.
GAC работает с полным доверием и может быть использован приложениями за пределами вашего веб-приложения. Например, задания таймера в Sharepoint HAVE должны быть в GAC, поскольку служба sptimer является отдельным процессом.
Часть "Full Trust" также является возможным источником проблем безопасности. Конечно, вы можете работать с защитой доступа к коду, но я не вижу слишком много сборок, использующих CAS, к сожалению : (папка /bin может быть заблокирована на носителе, что обычно нормально.
Дэниел Ларсон также опубликовал сообщение на CAS , в котором более подробно описываются различия.
Если вы отправляете повторно используемую библиотеку, состоящую из нескольких сборок, но только некоторые из них образуют фасад, вы можете рассмотреть возможность установки сборок в GAC, если пакет установлен в PCs разработчика.
Представьте, что вы отправляете 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, либо на in GAC:
- Вы можете попросить разработчиков найти папку установки и добавить ссылки на все N сборок, которые вы туда поместили. Это гарантирует, что они будут скопированы в папку Bin, чтобы быть доступными во время выполнения.
- Вы можете установить шаблон проекта VS.NET, уже содержащий эти 6 ссылок . Немного сложно, так как вы должны ввести фактический путь к вашим сборкам в этот шаблон перед его установкой. Это может быть сделано только установщиком, так как этот путь зависит от пути установки.
- Вы можете попросить разработчиков создать специальный шаг после сборки в файле .csproj / .vbproj , копируя необходимые зависимости в папку Bin. Те же недостатки.
- Наконец, вы можете установить все свои сборки в GAC . В этом случае разработчики должны добавить ссылку только на MyProduct.Facade.dll из своего проекта. Все остальное будет доступно во время выполнения в любом случае.
Примечание: последний вариант не заставляет вас делать то же самое при отправке проекта в production PCs. Вы можете либо отправить все сборки в папку Bin, либо установить их в GAC - все зависит от вашего желания.
Таким образом, описанное решение показывает преимущество использования сторонних сборок в GAC во время разработки. Это никак не связано с производством.
Как вы можете заметить, установка в GAC в основном предназначена для решения проблемы размещения необходимых сборок (зависимостей). Если assembly установлен в GAC, вы можете считать, что он существует "nearby" любое приложение. Это все равно, что добавить путь к .exe в переменную PATH, но в "managed way". - конечно, это довольно упрощенное описание ;)
Я думаю, что одним из самых больших преимуществ использования GAC является то, что вы можете иметь несколько версий одного и того же assembly, зарегистрированных и доступных для ваших приложений. Лично мне не нравится, как он ограничивает движение от машины к машине (мне не нравится говорить, что нужно проверить источник на новом VPC и пройти через кучу шагов, чтобы запустить его, потому что я должен зарегистрировать материал в GAC)