Che cos'è esattamente un assembly in C # o .NET?


102

Potresti spiegare cos'è un assembly in C # o .NET?

  1. Dove inizia e dove finisce?
  2. Quali informazioni importanti dovrei sapere sugli assembly?

5
A rigor di termini, un assembly non è un concetto .NET piuttosto che un concetto C #?
JeffH

14
@ JeffH: quando ho posto la domanda ho pensato che fosse un concetto C #. Ora capisco che è .NET. Tuttavia, poiché penso che altre persone possano essere confuse come me, non l'ho intenzionalmente cambiata per far sì che Google si
adattasse

Risposte:


114

Un assembly è l'output compilato del codice, in genere una DLL, ma anche l'EXE è un assembly. È la più piccola unità di distribuzione per qualsiasi progetto .NET.

L'assembly contiene in genere codice .NET in MSIL (linguaggio Microsoft Intermediate) che verrà compilato in codice nativo ("JITted" - compilato dal compilatore Just-In-Time) la prima volta che viene eseguito su una determinata macchina. Il codice compilato verrà anche archiviato nell'assembly e riutilizzato nelle chiamate successive.

L'assembly può anche contenere risorse come icone, bitmap, tabelle di stringhe e così via. Inoltre, l'assembly contiene anche metadati nel manifesto dell'assembly: informazioni come numero di versione, nome sicuro, impostazioni cultura, assembly di riferimento e così via.

Nel 99% dei casi, un assembly equivale a un file fisico su disco - il caso di un assembly multi-file (un assembly, distribuito su più di un singolo file) sembra essere un caso piuttosto strano che ho mai incontrato finora nei miei 5+ anni di sviluppo .NET.

In un assembly a più file ci sarebbe ancora un solo manifesto dell'assembly in una DLL o un EXE e il codice MSIL in più file netmodule.


1
@marc_s: Penso che tu intenda un file multi-assembly. È possibile impacchettare più assembly all'interno di un singolo file tramite gli strumenti della riga di comando di Studio, ma non direttamente tramite l'IDE.
Greg D

5
Una cosa molto importante in un assembly sono i metadati nel manifesto dell'assembly. Il manifest contiene informazioni come versione, nome sicuro, cultura, assembly di riferimento, ecc. In un assembly a più file ci sarebbe ancora un solo manifest dell'assembly in una dll o exe e il codice MSIL in più file .netmodule. Fondamentalmente un assembly è l'unità minima di distribuzione in> net
softveda

@marc_s: Apprezzerei se aggiungessi il punto di @ Pratik alla risposta, grazie
Roee Adler

@rax: fatto; @pratik: ora mi stai confondendo: parli di nuovo di "assemblaggio multi-file", mentre @GregD ha detto che era davvero un "file multi-assembly" - che cos'è adesso ?? (come ho detto, non ho mai incontrato una bestia del genere, quindi non sono un po 'chiaro se si tratta di più assembly per file o più file per assembly ....)
marc_s

3
"Il codice compilato verrà anche archiviato nell'assembly e riutilizzato nelle chiamate successive." Ciò è fuorviante e / o non molto chiaro. Nessun codice compilato viene "memorizzato" in un assembly. Penso che tu possa riferirti al modo in cui ogni metodo / funzione viene "jitted" al codice nativo quando viene chiamato per la prima volta. Quindi, mentre l'assembly è in memoria, viene chiamata la versione del codice nativo del metodo. Se l'assembly viene scaricato e successivamente ricaricato, il processo jit si verificherà di nuovo. Ovviamente ciò presuppone che non si stia utilizzando NGEN per precompilare gli assembly in codice nativo (non consigliato).
Ash,

13

.NET assembly

Nel framework Microsoft .NET, un assembly è una libreria di codice parzialmente compilata da utilizzare nella distribuzione, nel controllo delle versioni e nella sicurezza.


7

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

Un assembly è un file che viene generato automaticamente dal compilatore dopo la corretta compilazione di ogni applicazione .NET. Può essere una libreria di collegamento dinamico o un file eseguibile. Viene generato una sola volta per un'applicazione e ad ogni successiva compilazione l'assembly viene aggiornato.


2
Gli assembly sono distinti dai file che li contengono.
Greg D

1
@Raghav - Aggiorna la tua fotografia con qualcosa di casual per l'amor del cielo! Non stiamo posando qui per i passaporti, sai!
TheFlash

3

Ecco un'altra spiegazione della composizione degli assembly .NET, una mini citazione:

Il framework .NET è costituito dai concetti di moduli, assembly, che memorizzano sia metadati che informazioni manifest. Un assembly può contenere più moduli. Visual C # crea sempre e solo un modulo che viene trasformato in un assembly dal compilatore C # (csc.exe), ma un assembly può collegare insieme molti moduli .NET tramite lo strumento da riga di comando assembly linker (al.exe). Ad esempio, ciascuno dei file .cs del codice sorgente potrebbe essere compilato in un modulo e collegato insieme per formare un assembly: un assembly è solo una raccolta di moduli e risorse. Uno di questi moduli, tuttavia; deve contenere informazioni sui metadati manifest (vedere di seguito) affinché l'assembly possa essere compreso dal CLR.
....
Dopo aver creato un nuovo .exe o .dll all'interno di VS.NET, vedrai il tuo file apparire nella tua cartella bin. Aprirlo nel blocco note darà un senso senza senso, o anche all'interno di un editor esadecimale senza conoscere la struttura del file, è necessario uno strumento come ildasm.exe o CFF explorer per ricavarne un significato. La struttura dell'assieme è la seguente:

Intestazione PE Intestazione
CLR
Metadati
CLR
Codice IL CLR
Dati nativi


Dove diavolo mi porta quel collegamento? Una specie di reindirizzamenti infiniti! Dopo alcuni reindirizzamenti mi ha portato a una pagina che dice questo . Nessun modo per ottenere l'originale dell'URL che hai pubblicato.
Sнаđошƒаӽ

2

La risposta è in ordine per la comprensione immediata.

In parole povere, è il progetto compilato che coinvolge le tue classi e file aggiuntivi, se ci sono. Ovvero, ogni progetto in una soluzione è un assembly .

O più tecnicamente,

Un assembly è dove un tipo è memorizzato nel flesystem. Gli assembly sono un meccanismo per la distribuzione del codice. Ad esempio, l' System.Data.dll assembly contiene tipi per la gestione dei dati. Per usare i tipi in altri assembly, è necessario fare riferimento a essi. - Fonte

Come lo sappiamo? Se dai un'occhiata alle proprietà di un progetto sotto la soluzione puoi vedere le seguenti immagini.

Quando si compila il progetto, risulta essere DLL o EXE .

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1

Quando un codice sorgente viene compilato dal compilatore del linguaggio, genera un Managed Assembly e MSIL (MisroSoft Intermediate Language). Quell'assembly contiene file .dll o .exe . Un Assebmly può essere di due tipi Private Assembly e Shared Assembly , l'Assembly condiviso viene archiviato in GAC (Global Assembly Cache) in modo che qualsiasi applicazione possa fare riferimento ad esso mentre l'assembly privato è archiviato nella cartella dell'applicazione che può essere utilizzata da una sola Applicazione.


0

Un assembly è una DLL o un EXE che verrà creato quando lo pubblichi o compili l'applicazione.


0

Un assembly è una raccolta di unità logiche. Le unità logiche si riferiscono ai tipi e alle risorse necessari per creare un'applicazione e distribuirle utilizzando il framework .Net. Fondamentalmente, Assembly è una raccolta di file exe e DLL. È portatile ed eseguibile.


-1

Dopo aver scritto il codice sorgente del tuo programma (progetto), viene creato un file che può essere DLL o EXE dipende dal tuo progetto. Fa solo una volta per un singolo progetto. Ha due tipi 1: - singolo 2: - assemblaggio singolo condiviso o multiprogramma usato solo in un singolo programma mentre condiviso può essere usato per multiprogramma


Dopo aver scritto il codice sorgente del tuo programma (progetto), viene creato un file che può essere DLL o EXE dipende dal tuo progetto - dopo aver scritto il codice sorgente? Non sembra essere un'indicazione molto buona su quando viene creato quel file, che BTW è irrilevante data la domanda.
Sнаđошƒаӽ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.