Основной задачей программиста является написание исходного текста программы на одном из языков программирования. Хороший программист, разрабатывая новую программу, не пишет весь код заново. Он старается использовать уже готовые программные коды (библиотеки), написанные как им самим, так и другими разработчиками. Если рассматривать эти библиотеки, как строительные блоки, то программист из них, как из кирпичей, строит здание – новую программу.
В процессе развития технологии программирования было несколько вариантов реализации подхода к повторному использованию кода. На сегодня это динамически подгружаемые библиотеки (DLL). DLL – это неуправляемые переносимые исполняемые PE-файлы (PE – portable executable). Это значит, что компьютер, работающий под управлением Windows, способен загрузить этот файл и выполнить код, содержащийся в нем.
Данный подход используется уже несколько лет и кроме достоинств в нем есть ряд недостатков. В частности для использования DLL подгружается, но не выгружается, когда перестает использоваться. В качестве решения проблем DLL-библиотек в .NET предложен новый подход, в соответствии с которым на замену DLL-библиотекам пришло понятие сборок.
Сборка – это единица повторного использования кода, в которой поддерживается система управления версиями и заложена система управления безопасности программного обеспечения. Сборка подключается только на время исполнения кода. Файл сборки называется управляемым.
Сборка наряду с программным кодом CIL содержит метаданные и данные (ресурсы), необходимые при исполнении сборки для генерации бинарного файла. В общем виде структура сборки:

Заголовок CLR – содержит информацию, указывающую, что сборка является исполняемым файлом .NET,
Данные CLR – определяют, как будет выполняться программа. Данные включают метаданные и код программы на CIL. Служебная информация (метаданные) получила название манифест.