Що таке збірка в C # або .NET?


102

Чи можете ви поясніть, що таке асамблея в C # або .NET?

  1. Де воно починається і де закінчується?
  2. Яку важливу інформацію я повинен знати про збори?

5
Строго кажучи, чи не складання .NET концепції, а не концепції C #?
JeffH

14
@JeffH: коли я задав питання, я подумав, що це концепція C #. Тепер я розумію, що це .NET. Тим не менше, оскільки я думаю, що інші люди можуть плутати, як і я, я навмисно не змінював це для того, щоб Google прийняв цю помилку ...
Roee Adler,

Відповіді:


114

Збірка - це складений вихід вашого коду, як правило, DLL, але ваш EXE також є збіркою. Це найменша одиниця розгортання для будь-якого проекту .NET.

Збірка, як правило, містить .NET-код у MSIL (проміжна мова Microsoft), який буде скомпільований у рідний код ("JITted" - укладений компілятором Just-In-Time) при першому його виконанні на даній машині. Цей складений код також буде зберігатися у складі та повторно використовуватися при наступних викликах.

Асамблея також може містити такі ресурси, як піктограми, растрові карти, рядкові таблиці тощо. Крім того, збірка також містить метадані в маніфесті збірки - така інформація, як номер версії, чітке ім'я, культура, згадані збірки тощо.

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

У мультифайловій збірці все ще залишиться лише один маніфест, що проявляється в DLL або EXE, і код MSIL у кількох файлах неттомодулів.


1
@marc_s: Я думаю, ви маєте на увазі файл з декількома збірками. Можна упакувати декілька збірок в одному файлі за допомогою інструментів командного рядка студії, але не безпосередньо через IDE.
Грег Д

5
Дуже важливою річчю в збірці є метадані в маніфесті збірки. У маніфесті є така інформація, як версія, сильне ім'я, культура, посилання на збірки і т.д. В основному збірка - це мінімальна одиниця розгортання в> net
softveda

@marc_s: Буду вдячний, якщо ви додасте до відповіді пункт @ Pratik, дякую
Roee Adler,

@rax: зроблено; @pratik: зараз ти мене плутаєш: ти знову говориш про "багатоскладову збірку", тоді як @GregD згадав, що це справді "багатоскладовий файл" - що це зараз ?? (як я вже сказав - я ніколи не стикався з таким звіром, тому мені трохи незрозуміло, чи це декілька збірок на файл, чи декілька файлів на збірку ....)
marc_s

3
"Цей складений код також буде зберігатися у складі та повторно використовуватися при наступних викликах." Це вводить в оману та / або не дуже ясно. Жоден складений код не "зберігається" в зборі. Я думаю, що ви, можливо, посилаєтесь на те, як кожен метод / функція "jitted" до нативного коду, коли він вперше викликається. Потім, поки збірка знаходиться в пам’яті, викликається нативна версія методу. Якщо збірка буде завантажена і пізніше перезавантажена, процес jit відбуватиметься знову. Звичайно, це передбачає, що ви не використовуєте NGEN для попереднього складання своїх збірок до основного коду (не рекомендується).
Еш

13

.NET збірка

У рамках Microsoft .NET, збірка - це частково складена бібліотека кодів для використання в розгортанні, версії та безпеці.


7

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

Збірка - це файл, який автоматично генерується компілятором після успішної компіляції кожної програми .NET. Це може бути або бібліотека динамічних посилань, або виконуваний файл. Він генерується лише один раз для програми та після кожного наступного складання збірка оновлюється.


2
Асамблеї відрізняються від файлів, які їх містять.
Грег Д

1
@Raghav - оновіть свою фотографію чимось випадковим заради неба! Ми не позуємо тут для паспортів, знаєте!
TheFlash

3

Ось ще одне пояснення щодо складання .NET зборів, міні-цитата:

Рамка .NET складається з концепцій модулів, збірок, які зберігають як метадані, так і маніфестовую інформацію. Збірка може містити кілька модулів. Visual C # лише коли-небудь створює один модуль, який перетворюється на збірку компілятором C # (csc.exe), але збірка може з'єднати багато модулів .NET разом через інструмент командного рядка збирання linker (al.exe). Наприклад, кожен з вихідних кодів .cs-файлів може бути зібраний в модуль і пов'язаний між собою для формування збірки - збірка - це лише сукупність модулів та ресурсів. Однак один з цих модулів; повинні містити явні метадані (див. нижче) інформацію про збірку, яку слід зрозуміти CLR.
….
Створивши новий .exe або .dll у VS.NET, ви побачите, що ваш файл з’являється всередині вашої папки. Відкривши його в блокноті, ви отримаєте невмілий або навіть всередині шістнадцятковий редактор, не знаючи структури файлу, вам потрібен такий інструмент, як ildasm.exe або провідник CFF, щоб визначити з нього сенс. Структура збірки така:

PE-заголовок
CLR-заголовок
CLR-метадані
CLR
IL-код
Нативні дані


Куди, до біса, це посилання веде мене? Вид нескінченних переадресацій! Після кількох переадресацій це перейшло до сторінки, на якій написано це . Немає можливості отримати оригінальний URL-адресу, який ви також опублікували.
Snađошƒаӽ

2

Відповідь полягає в тому, щоб негайно зрозуміти.

Простіше кажучи, це складений проект, що включає ваші класи та додаткові файли, якщо такі є. Тобто кожен проект у рішенні - це складання .

Або більш технічно,

Складання , де тип зберігається в flesystem. Асамблеї - це механізм розгортання коду. Наприклад, System.Data.dll збірка містить типи для управління даними. Для використання типів в інших збірках вони повинні бути посиланнями. - Джерело

Як ми це знаємо? Якщо ви подивитесь на властивості проекту під рішенням, ви можете побачити наступні зображення.

При складанні проекту виявляється DLL або EXE .

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


1

Коли вихідний код компілюється компілятором мови, він генерує керовану збірку та MSIL (MisroSoft Intermediate Language). Ця асамблея містить .dll або .exe файл . Assebmly може бути двох типів: Private Assembly та Shared Assembly ; спільна асамблея зберігається в GAC (Global Assembly Cache), так що будь-яка програма може посилатися на неї, тоді як приватна збірка зберігається в папці додатків, яку може використовувати лише одна програма.


0

Збірка - це DLL або EXE, які будуть створені, коли ви опублікуєте його або скомпілюєте свою заявку.


0

Асамблея - це сукупність логічних одиниць. Логічні одиниці відносяться до типів та ресурсів, необхідних для складання програми та їх розгортання за допомогою .Net Framework. В основному, зборка - це колекція Exe та DLL. Він портативний та виконується.


-1

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


Після написання вихідного коду вашої програми (проекту) тоді створюється файл, який може бути DLL або EXE, залежить від вашого проекту - після написання вихідного коду? Чи не схоже , щоб бути дуже хороший показник того , щоб , коли створюються цей файл, який до речі є несуттєвим даним питанням.
Snađошƒаӽ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.