День сто шестьдесят девятый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по .NET
9. Что такое сборка?
Сборка - это логическая группировка одного или нескольких управляемых модулей или файлов ресурсов. Это самая маленькая единица с точки зрения многократного использования, безопасности и управления версиями. Управляемые модули сборки могут быть файлами dll или exe в зависимости от типа проекта.
1. Закрытые (private) сборки
Это сборка, которая используется только одним приложением. Предположим, у нас есть проект, в котором мы ссылаемся на DLL, поэтому при создании этого проекта эта DLL будет скопирована в папку bin нашего проекта. Эта DLL становится закрытой сборкой в нашем проекте. Обычно библиотеки DLL, предназначенные для конкретного проекта, являются закрытыми сборками.
2. Совместно используемые (shared) сборки
Сборки, которые можно использовать более чем в одном проекте, известны как совместно используемые. Такие сборки обычно устанавливаются в GAC. Сборки, установленные в GAC, становятся доступными для всех приложений .NET на этом компьютере.
GAC
GAC (Global Assembly Cache, Глобальный Кэш Сборок) - это место на диске, где располагаются совместно используемые сборки. До .NET 3.5 GAC располагался в
Установка сборки в GAC
GAC обладает особой структурой и содержит множество вложенных каталогов, имена которых генерируются по определённому алгоритму. Ни в коем случае нельзя копировать файлы сборок в GAC вручную. Для установки сборки в GAC сначала необходимо создать строгое имя для сборки, поскольку в GAC устанавливаются только сборки со строгим именем. Все остальные сборки называются сборками со слабым (нестрогим) именем, и их нельзя сохранить в GAC.
Для создания строгого имени нужно получить пару ключей с помощью утилиты Strong Name
После этого подписанную сборку со строгим именем можно установить в GAC с помощью утилиты
Источники:
- https://www.c-sharpcorner.com
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 3.
Самые часто задаваемые вопросы на собеседовании по .NET
9. Что такое сборка?
Сборка - это логическая группировка одного или нескольких управляемых модулей или файлов ресурсов. Это самая маленькая единица с точки зрения многократного использования, безопасности и управления версиями. Управляемые модули сборки могут быть файлами dll или exe в зависимости от типа проекта.
1. Закрытые (private) сборки
Это сборка, которая используется только одним приложением. Предположим, у нас есть проект, в котором мы ссылаемся на DLL, поэтому при создании этого проекта эта DLL будет скопирована в папку bin нашего проекта. Эта DLL становится закрытой сборкой в нашем проекте. Обычно библиотеки DLL, предназначенные для конкретного проекта, являются закрытыми сборками.
2. Совместно используемые (shared) сборки
Сборки, которые можно использовать более чем в одном проекте, известны как совместно используемые. Такие сборки обычно устанавливаются в GAC. Сборки, установленные в GAC, становятся доступными для всех приложений .NET на этом компьютере.
GAC
GAC (Global Assembly Cache, Глобальный Кэш Сборок) - это место на диске, где располагаются совместно используемые сборки. До .NET 3.5 GAC располагался в
C:\Windows\assembly
, в более поздних версиях - в C:\Windows\Microsoft.NET\assembly\GAC_MSIL
.Установка сборки в GAC
GAC обладает особой структурой и содержит множество вложенных каталогов, имена которых генерируются по определённому алгоритму. Ни в коем случае нельзя копировать файлы сборок в GAC вручную. Для установки сборки в GAC сначала необходимо создать строгое имя для сборки, поскольку в GAC устанавливаются только сборки со строгим именем. Все остальные сборки называются сборками со слабым (нестрогим) именем, и их нельзя сохранить в GAC.
Для создания строгого имени нужно получить пару ключей с помощью утилиты Strong Name
SN.exe
, поставляемой в составе .NET Framework SDK и Visual Studio. После этого сборка компилируется вместе с файлом ключей. При указании такого файла при компиляции компилятор подписывает сборку закрытым ключом, а открытый ключ встраивает в манифест сборки.После этого подписанную сборку со строгим именем можно установить в GAC с помощью утилиты
GACUtil.exe
. Подписание файла закрытым ключом гарантирует, что именно держатель соответствующего открытого ключа является производителем сборки. Кроме того, рассчитывается хэш содержимого файлов и сохраняется в таблице FileDef
манифеста сборки. Это предохраняет сборку от изменения. При установке сборки в GAC хэши файлов рассчитываются заново и сравниваются со значениями из таблицы FileDef
. Если хотя бы одно не совпадает, значит файлы были изменены, и установка сборки в GAC закончится неудачей.Источники:
- https://www.c-sharpcorner.com
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 3.