Assembly in .NET

Gli assembly formano le unità fondamentali di distribuzione, controllo della versione, riutilizzo, ambito di attivazione e autorizzazioni di sicurezza per . Applicazioni basate su NET. Un assembly è una raccolta di tipi e risorse creati per essere usati insieme e per formare un'unità logica di funzionalità. Gli assembly hanno la forma di file eseguibili(.exe) o di libreria a collegamento dinamico (.dll) e sono i blocchi predefiniti delle applicazioni .NET. Gli assembly forniscono al Common Language Runtime le informazioni necessarie per riconoscere le implementazioni dei tipi.

In .NET e .NET Framework è possibile compilare un assembly da uno o più file di codice sorgente. In .NET Framework gli assembly possono contenere uno o più moduli. In questo modo è possibile programmare progetti di dimensioni maggiori in modo che più sviluppatori possano lavorare su moduli o file di codice sorgente separati, combinati per creare un singolo assembly. Per altre informazioni sui moduli, vedere Procedura: Compilare un assembly su più file.

Di seguito sono riportate le proprietà degli assembly:

  • Gli assembly vengono implementati come.exe o .dll file.

  • Per le librerie .NET Framework, è possibile condividere gli assembly tra applicazioni inserendoli nella Global Assembly Cache (GAC). È necessario assegnare un nome sicuro agli assembly prima di poterli includere nella GAC. Per altre informazioni, vedere Assembly con nome sicuro.

  • Gli assembly vengono caricati in memoria solo se sono richiesti. Se non vengono usati, non vengono caricati. Questo significa che gli assembly rappresentano un modo efficace per gestire le risorse nei progetti di maggiori dimensioni.

  • È possibile ottenere informazioni su un assembly a livello di codice tramite reflection. Per altre informazioni, vedere Reflection (C#) o Reflection (Visual Basic).

  • È possibile caricare un assembly solo per esaminarlo usando la MetadataLoadContext classe in .NET e .NET Framework. MetadataLoadContext sostituisce i Assembly.ReflectionOnlyLoad metodi .

Assembly in Common Language Runtime

Gli assembly forniscono a Common Language Runtime le informazioni necessarie per conoscere le implementazioni dei tipi. Per il runtime, un tipo non esiste all'esterno del contesto di un assembly.

Un assembly definisce le informazioni seguenti:

  • Codice eseguito da Common Language Runtime. Si noti che ogni assembly può avere un solo punto di ingresso: DllMain WinMain , o Main .

  • Limite di sicurezza. Un assembly è l'unità presso cui sono richieste e concesse le autorizzazioni. Per altre informazioni sui limiti di sicurezza negli assembly, vedere Considerazioni sulla sicurezza degli assembly.

  • Limite del tipo. L'identità di ogni tipo include il nome dell'assembly in cui risiede. Un tipo con nome MyType caricato nell'ambito di un assembly è diverso da un tipo con nome MyType caricato nell'ambito di un altro assembly.

  • Limite dell'ambito di riferimento. Il manifesto dell'assembly include metadati usati per risolvere i tipi e soddisfare le richieste di risorse. Il manifesto specifica i tipi e le risorse da esporre all'esterno dell'assembly ed enumera gli altri assembly da cui dipende. Il codice MSIL (Microsoft Intermediate Language) in un file eseguibile portabile (PE) non verrà eseguito a meno che non abbia un manifesto dell'assembly associato.

  • Limite della versione. L'assembly è la più piccola unità versionable in Common Language Runtime. Per tutti i tipi e le risorse nello stesso assembly viene specificato il controllo delle versioni come unità. Il manifesto dell'assembly descrive le dipendenze della versione specificate per tutti gli assembly dipendenti. Per altre informazioni sul controllo delle versioni, vedere Controllo delle versioni degli assembly.

  • Unità di distribuzione. All'avvio di un'applicazione, devono essere presenti solo gli assembly chiamati inizialmente dall'applicazione. Altri assembly, ad esempio gli assembly contenenti risorse di localizzazione o classi di utilità, possono essere recuperati su richiesta. In questo modo le app possono essere semplici e thin quando vengono scaricate per la prima volta. Per altre informazioni sulla distribuzione di assembly, vedere Distribuire applicazioni.

  • Unità di esecuzione side-by-side. Per altre informazioni sull'esecuzione di più versioni di un assembly, vedere Assembly ed esecuzione side-by-side.

Creare un assembly

Gli assembly possono essere statici o dinamici. Gli assembly statici sono archiviati su disco in file eseguibili portabili. Gli assembly statici possono includere interfacce, classi e risorse come bitmap, file JPEG e altri file di risorse. È anche possibile creare assembly dinamici, che vengono eseguiti direttamente dalla memoria e non vengono salvati su disco prima dell'esecuzione. È possibile salvare gli assembly dinamici su disco dopo l'esecuzione.

Esistono diversi modi per creare assembly. È possibile usare strumenti di sviluppo, ad esempio Visual Studio, che possono creare.dll o .exe file. È possibile usare gli strumenti in Windows SDK per creare assembly con moduli da altri ambienti di sviluppo. Per creare assembly dinamici è anche possibile usare le API di Common Language Runtime come System.Reflection.Emit.

Compilare gli assembly compilandoli in Visual Studio, compilandoli con gli strumenti dell'interfaccia della riga di comando di .NET Core o compilando assembly .NET Framework con un compilatore da riga di comando. Per altre informazioni sulla compilazione di assembly con l'interfaccia della riga di comando di .NET, vedere Panoramica dell'interfaccia della riga di comando di .NET.

Nota

Per compilare un assembly in Visual Studio, scegliere Compila dal menu Compila.

Manifesto dell'assembly

Ogni assembly ha un file manifesto dell'assembly. Analogamente a un sommario, il manifesto dell'assembly contiene:

  • L'identità dell'assembly, ovvero il nome e la versione.

  • Tabella di file che descrive tutti gli altri file che costituiscono l'assembly, ad esempio gli altri assembly creati su cui si basa il file .exe o .dll, i file bitmap o i file Leggimi.

  • Un elenco di riferimenti all'assembly, ovvero un elenco di tutte le dipendenze esterne, ad esempio.dllo altri file. ** I riferimenti all'assembly contengono riferimenti a oggetti sia privati che globali. Gli oggetti globali sono disponibili per tutte le altre applicazioni. In .NET Core gli oggetti globali sono associati a un particolare runtime di .NET Core. In .NET Framework, gli oggetti globali si trovano nella Global Assembly Cache (GAC). System.IO.dll è un esempio di assembly nella GAC. Gli oggetti privati devono essere in un livello di directory al di sotto o al di sotto della directory in cui è installata l'app.

Poiché gli assembly contengono informazioni sul contenuto, il controllo delle versioni e le dipendenze, le applicazioni che li usano non devono basarsi su origini esterne, ad esempio il Registro di sistema nei sistemi Windows, per funzionare correttamente. Gli assembly riducono .dll conflitti e rendono le applicazioni più affidabili e più facili da distribuire. In molti casi, è possibile installare un'applicazione basata su .NET semplicemente copiandone i file nel computer di destinazione. Per altre informazioni, vedere Manifesto dell'assembly.

Aggiungere un riferimento a un assembly

Per usare un assembly in un'applicazione, è necessario aggiungervi un riferimento. Dopo aver fatto riferimento a un assembly, tutti i tipi, le proprietà, i metodi e gli altri membri accessibili dei relativi spazi dei nomi sono disponibili per l'applicazione come se il relativo codice fosse parte del file di origine.

Nota

Per la maggior parte degli assembly dalla libreria di classi .NET i riferimenti sono automatici. Se a un assembly di sistema non viene fatto riferimento automaticamente, aggiungere un riferimento in uno dei modi seguenti:

  • Per .NET e .NET Core, aggiungere un riferimento al pacchetto NuGet che contiene l'assembly. Usare il NuGet Gestione pacchetti in Visual Studio o aggiungere un elemento per l'assembly al progetto con estensione <PackageReference> csproj o vbproj.
  • Ad .NET Framework, aggiungere un riferimento all'assembly usando la finestra di dialogo Aggiungi riferimento in Visual Studio o usando l'opzione della riga di comando per i compilatori -reference C# o Visual Basic compilazione.

In C# è possibile usare due versioni dello stesso assembly in una singola applicazione. Per altre informazioni, vedere alias esterno.

Titolo Descrizione
Contenuto degli assembly Elementi che costituiscono un assembly.
Manifesto dell'assembly Dati nel manifesto dell'assembly e modalità di archiviazione negli assembly.
Global Assembly Cache Modalità di archiviazione e utilizzo degli assembly nella GAC.
Assembly con nomi sicuri Caratteristiche degli assembly con nome sicuro.
Considerazioni sulla sicurezza degli assembly Funzionamento della sicurezza con gli assembly.
Controllo delle versioni degli assembly Panoramica dei criteri .NET Framework controllo delle versioni.
Ubicazione degli assembly Posizione in cui individuare gli assembly.
Assembly ed esecuzione contemporanea di più versioni Usare più versioni del runtime o di un assembly contemporaneamente.
Creare metodi e assembly dinamici Come creare assembly dinamici.
Modalità di individuazione degli assembly da parte del runtime Modalità di risoluzione .NET Framework riferimenti ad assembly in fase di esecuzione.

Riferimento

System.Reflection.Assembly

Vedi anche