Что такое сборка на C # или .NET?

104

Не могли бы вы объяснить, что такое сборка на C # или .NET?

  1. Где это начинается и где заканчивается?
  2. Какую важную информацию я должен знать о сборках?
Рои Адлер
источник
5
Строго говоря, разве сборка не является концепцией .NET, а не концепцией C #?
JeffH 01
14
@JeffH: когда я задал вопрос, я подумал, что это концепция C #. Теперь я понимаю, что это .NET. Тем не менее, поскольку я думаю, что другие люди могут быть сбиты с толку, как и я, я намеренно не изменил его, чтобы Google приспособился к этой ошибке ...
Рои Адлер

Ответы:

114

Сборка - это скомпилированный вывод вашего кода, обычно это DLL, но ваш EXE также является сборкой. Это самая маленькая единица развертывания для любого проекта .NET.

Сборка обычно содержит код .NET на MSIL (промежуточный язык Microsoft), который будет скомпилирован в собственный код («JITted» - скомпилированный компилятором Just-In-Time) при первом запуске на данной машине. Этот скомпилированный код также будет сохранен в сборке и повторно использован при последующих вызовах.

Сборка также может содержать такие ресурсы, как значки, растровые изображения, таблицы строк и т. Д. Кроме того, сборка также содержит метаданные в манифесте сборки - такую ​​информацию, как номер версии, строгое имя, региональные параметры, сборки, на которые имеются ссылки, и т. Д.

В 99% ваших случаев одна сборка равна физическому файлу на диске - случай многофайловой сборки (одна сборка, распределенная по более чем одному файлу) кажется довольно странным случаем края, который я никогда не встречал до сих пор за мои 5+ лет разработки .NET.

В многофайловой сборке по-прежнему будет только один манифест сборки в DLL или EXE и код MSIL в нескольких файлах netmodule.

marc_s
источник
1
@marc_s: Я думаю, вы имеете в виду файл с несколькими сборками. Можно упаковать несколько сборок в один файл с помощью инструментов командной строки студии, но не напрямую через IDE.
Грег Д.
5
Очень важная вещь в сборке - это метаданные в манифесте сборки. В манифесте содержится такая информация, как версия, строгое имя, язык и региональные параметры, сборки, на которые имеются ссылки и т. Д. В многофайловой сборке по-прежнему будет только один манифест сборки в dll или exe и код MSIL в нескольких файлах .netmodule. По сути, сборка - это минимальная единица развертывания в> сети
softveda 01
@marc_s: Я был бы признателен, если бы вы добавили точку @ Pratik к ответу, спасибо
Рои Адлер
@rax: готово; @pratik: теперь вы меня сбиваете с толку: вы снова говорите о "многофайловой сборке", а @GregD упомянул, что это действительно был "файл с несколькими сборками" - что это теперь ?? (как я уже сказал - я никогда не встречал такого зверя, поэтому мне немного неясно, несколько сборок на файл или несколько файлов на сборку ....)
marc_s
3
«Этот скомпилированный код также будет сохранен в сборке и повторно использован при последующих вызовах». Это вводит в заблуждение и / или не очень ясно. Скомпилированный код не «хранится» в сборке. Я думаю, вы, возможно, имеете в виду то, как каждый метод / функция «привязан» к машинному коду при первом вызове. Затем, пока сборка находится в памяти, вызывается версия метода в собственном коде. Если сборка выгружается, а затем перезагружается, процесс jit повторяется снова. Конечно, это предполагает, что вы не используете NGEN для предварительной компиляции ваших сборок в машинный код (не рекомендуется).
Эш,
13

Сборка .NET

В платформе Microsoft .NET сборка представляет собой частично скомпилированную библиотеку кода для использования при развертывании, управлении версиями и безопасности.


источник
7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

Сборка - это файл, который автоматически создается компилятором после успешной компиляции каждого приложения .NET. Это может быть либо библиотека динамической компоновки, либо исполняемый файл. Он генерируется только один раз для приложения, и при каждой последующей компиляции сборка обновляется.

Рагхав
источник
2
Сборки отличаются от файлов, которые их содержат.
Грег Д.
1
@Raghav - Ради бога, обновите свою фотографию чем-нибудь случайным! Мы ведь не позируем здесь для паспортов!
TheFlash
3

Вот еще одно объяснение структуры сборок .NET, небольшая цитата:

Платформа .NET состоит из концепций модулей и сборок, в которых хранятся как метаданные, так и информация о манифестах. Сборка может содержать несколько модулей. Visual C # всегда создает только один модуль, который превращается в сборку компилятором C # (csc.exe), но сборка может связывать вместе множество модулей .NET с помощью инструмента командной строки компоновщика сборок (al.exe). Например, каждый из файлов .cs исходного кода можно скомпилировать в модуль и связать вместе, чтобы сформировать сборку - сборка - это просто набор модулей и ресурсов. Однако один из этих модулей; должен содержать манифестные метаданные (см. ниже), чтобы сборка была понятна CLR.
....
Создав новый .exe или .dll внутри VS.NET, вы увидите, что ваш файл появится в папке bin. Открытие его в блокноте выдаст тарабарщину, или даже в шестнадцатеричном редакторе, не зная структуры файла, вам понадобится такой инструмент, как ildasm.exe или CFF explorer, чтобы понять его смысл. Структура сборки следующая:

Заголовок PE Заголовок
среды
CLR Метаданные
среды CLR
Код IL
Собственные данные

Крис С
источник
Куда, черт возьми, меня ведет эта ссылка? Вид бесконечных редиректов! После нескольких перенаправлений я попал на страницу, на которой написано это . Также невозможно получить исходный URL-адрес, который вы разместили.
Sнаđошƒаӽ 03
2

Ответ для немедленного схватывания.

Проще говоря, это скомпилированный проект, включающий ваши классы и дополнительные файлы, если они есть. То есть каждый проект в решении - это сборка .

Или, точнее говоря,

Сборки , где тип хранится в flesystem. Сборки - это механизм развертывания кода. Например, System.Data.dll сборка содержит типы для управления данными. Чтобы использовать типы в других сборках, на них необходимо ссылаться. - Источник

Откуда мы это знаем? Если вы посмотрите на свойства проекта под решением, вы увидите следующие изображения.

При компиляции проекта получается DLL или EXE .

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

snr
источник
1

Когда исходный код компилируется компилятором языка, он создает управляемую сборку и MSIL (промежуточный язык MisroSoft). Эта сборка содержит файл .dll или .exe . Assebmly может быть двух типов: частная сборка и общая сборка , общая сборка хранится в GAC (глобальном кэше сборок), так что любое приложение может ссылаться на нее, в то время как частная сборка хранится в папке приложения, которая может использоваться только одним приложением.

Гарав Патни
источник
0

Сборка - это библиотека DLL или EXE, которая будет создана при ее публикации или компиляции приложения.

Ануп Шетти
источник
0

Сборка - это набор логических единиц. Логические единицы относятся к типам и ресурсам, которые требуются для создания приложения и их развертывания с использованием инфраструктуры .Net. По сути, Assembly - это набор Exe и DLL. Он переносимый и исполняемый.

Абхай.Патил
источник
-1

После написания исходного кода вашей программы (проекта) создается файл, который может быть DLL или EXE, в зависимости от вашего проекта. Делается только один раз для одного проекта. Он имеет два типа 1: - одиночный 2: - разделяемый или многопрограммный одиночный сборщик, используемый только в одной программе, в то время как общий может использоваться для многопрограмм

Кирти Кант Парарик
источник
После написания исходного кода вашей программы (проекта) создается файл, который может быть DLL или EXE, в зависимости от вашего проекта - после написания исходного кода? Кажется, не очень хорошее указание на то, когда этот файл создается, что, кстати, несущественно, учитывая вопрос.
Sнаđошƒаӽ