Assembly in .NET

Gli assembly costituiscono le unità fondamentali di distribuzione, controllo della versione, riutilizzo, ambito dell'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 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. Ciò consente di pianificare progetti di grandi dimensioni in modo che diversi sviluppatori possano lavorare su file o moduli di codice sorgente separati, combinati per creare un singolo assembly. Per altre informazioni sui moduli, vedere Procedura: Creare un assembly multifile.

Di seguito sono riportate le proprietà degli assembly:

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

  • Per le librerie destinate .NET Framework, è possibile condividere gli assembly tra le applicazioni inserendoli nella Global Assembly Cache (GAC). È necessario che gli assembly con nome sicuro possano essere inclusi 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, WinMaino 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 contiene metadati usati per la risoluzione dei tipi e la soddisfazione delle richieste di risorse. Il manifesto specifica i tipi e le risorse da esporre all'esterno dell'assembly ed enumera 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 è l'unità con versione più piccola in Common Language Runtime. Tutti i tipi e le risorse nello stesso assembly vengono con controllo delle versioni di un'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 assembly contenenti risorse di localizzazione o classi di utilità, possono essere recuperati su richiesta. In questo modo, le app possono essere semplici e sottili 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 file di.dll o di.exe. È possibile usare gli strumenti nell'SDK di Windows per creare assembly con moduli di altri ambienti di sviluppo. Per creare assembly dinamici è anche possibile usare le API di Common Language Runtime come System.Reflection.Emit.

Compilare gli assembly creandoli in Visual Studio, creandoli con strumenti di interfaccia della riga di comando di .NET Core o creando assembly .NET Framework con un compilatore della riga di comando. Per altre informazioni sulla compilazione di assembly tramite 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 altri assembly creati dall' .exe o .dll file si basa su file bitmap o Readme.

  • Elenco di riferimenti ad assembly, che è un elenco di tutte le dipendenze esterne, ad esempio .dlls o 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 determinato runtime di .NET Core. In .NET Framework gli oggetti globali risiedono nella Global Assembly Cache (GAC). System.IO.dll è un esempio di assembly nella GAC. Gli oggetti privati devono trovarsi a livello di directory al di sotto della directory in cui è installata l'app.

Poiché gli assembly contengono informazioni su contenuto, controllo delle versioni e dipendenze, le applicazioni che le usano non devono basarsi su origini esterne, ad esempio il Registro di sistema nei sistemi Windows, per funzionare correttamente. Gli assembly riducono i conflitti.dll e rendono le applicazioni più affidabili e 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 degli spazi dei nomi accessibili sono disponibili per l'applicazione come se il codice fosse incluso nel 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 oppure aggiungere un <elemento PackageReference> per l'assembly al progetto con estensione csproj o vbproj.
  • Per .NET Framework, aggiungere un riferimento all'assembly usando la finestra di dialogo Aggiungi riferimento in Visual Studio oppure usando l'opzione della -reference riga di comando per i compilatori C# o Visual Basic.

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.
Assembly con nomi sicuri Caratteristiche di assembly con nome sicuro.
Considerazioni sulla sicurezza degli assembly Funzionamento della sicurezza con gli assembly.
Controllo delle versioni degli assembly Panoramica dei criteri di controllo delle versioni di .NET Framework.
Ubicazione degli assembly Dove individuare gli assembly.
Assembly ed esecuzione contemporanea di più versioni Usare più versioni del runtime o un assembly contemporaneamente.
Creare metodi e assembly dinamici Come creare assembly dinamici.
Come il runtime individua gli assembly Come il .NET Framework risolve i riferimenti all'assembly in fase di esecuzione.

Riferimento

System.Reflection.Assembly

Vedi anche