Cerca nel sito
Giovedi, 6 Aprile 2017
Ultimo aggiornamento: Mercoledi, 2 Settembre 2009
Home Articoli Progetti Gallerie
icona freccia navigazioneHomeicona freccia navigazioneArticoliicona freccia navigazioneFramework .NETicona freccia navigazioneAssembly in .NET
icona articolo

Assembly in .NET

Un assembly è una raccolta di tipi e risorse progettati per interagire fra loro formando unità funzionali.

Un assembly costituisce l’unità fondamentale per la creazione di applicazioni .NET in quanto svolge le seguenti funzioni:
  • contiene codice MSIL (Microsoft Intermediate Language)
  • definisce i vincoli di sicurezza ricevendo ed accogliendo le richieste di autorizzazione
  • contribuisce alla definizione dei tipi la cui identità include in nome dell’assembli di appartenenza
  • assicura l’integrità di versione costituendo la più piccola unità aggiornabile all’interno del Common Language Runtime
  • costituisce un’unità di distribuzione: all’avvio di un’applicazione gli unici assembly necessari sono appunto quelli richiesti dall’applicazione stessa per il suo funzionamento

Per risolvere i problemi di controllo delle versioni e di conflitto fra DLL si utilizzano assembly che:
  • consentono di specificare regole di versione
  • forniscono l’infrastruttura per l’attivazione delle regole il controllo delle versioni
  • forniscono l’infrastruttura per l’esecuzione contemporanea di differenti versioni di un componente


icona articolo

Struttura di un assembly



Un assembly è costrituito da quattro elementi:
  • il manifesto che contiene i metadati dell’assembly
  • i metadati dei tipi utilizzati all’interno del codice MSIL
  • il codice MSIL vero e proprio
  • un insieme di risorse

Struttura di un assembly

Struttura di un assembly



L’immagine a fianco mostra la struttura tipica di un assembly su file singolo (Portable Executable).

L’organizzazione su file singolo è certamente quella per la quale optare quando si dispone di codice scritto nel medesimo linguaggio: è possibile esaminare la struttura interna di un assembly utilizzando l’utility ILDasm.exe fornita con il framework .NET.

Tali elementi possono essere raggruppati in un’unico file oppure essere distribuiti su più file: in quest’ultimo caso il manifesto dell’assembly conterrà tutti i riferimenti relativi ai file che costituiscono l’assembly stesso.

Lo stesso manifesto può essere memorizzato in un file Portable Executable (exe o dll) insieme al codice MSIL oppure in un Portable Executable autonomo.

Assembly su più file

Assembly su più file



Generalmente si opta per un assembly distribuito su più file quando si vogliono mettere insieme moduli sviluppati in linguaggi differenti.

Il manifesto di un assembly contiene le seguenti informazioni:
  • nome dell’assembly
  • numero di versione
  • lingua
  • nome sicuro
  • elenco di tutti i file dell’assembly
  • informazioni per il riferimento ai tipi
  • informazioni sugli assembly a cui si fa riferimento

E’ possibile modificare o aggiungere informazioni al manifesto utilizzando gli attributi dell’assembly nel proprio codice.


icona articolo

Attributi relativi all’identità



Gli attributi relativi all’identità dell’assembly utilizzabili sono:
  • AssemblyCultureAttribute: permette di indicare la lingua supportata dall’assembly
  • AssemblyFlagsAttribute: permette di impostare gli attributi relativi all’assembly indicando ad esempio e è possibile l’esecuzione affiancata di più versioni
  • AssemblyVersionAttribute: permette di specificare la versione dell’assembly nel formato

...



icona articolo

Attributi informativi



Gli attributi informativi permettono di specificare informazioni addizionali relative all’assembly:
  • AssemblyCompanyAttribute: permette di indicare il nome della società che ha prodotto l’assembly
  • AssemblyCopyrightAttribute: permette di specificare informazioni relative al copyright
  • AssemblyFileVersionAttribute: permette di specificare il numero di versione del file (l’impostazione predefinita corrisponde al numro di versione dell’assembly stesso)
  • AssemblyInformationalVersionAttribute: permette di specificare ulteriori informazioni relative alla versione
  • AssemblyProductAttribute: utilizzabile per specificare ulteriori informazioni relative al prodotto
  • AssemblyTrademarkAttribute: permette di specificare informazioni relative al marchio registrato


icona articolo

Attributi relativi al manifesto dell’assembly



I seguenti attributi permettono di fornire informazioni nel manifesto dell’assembly:
  • AssemblyConfigurationAttribute: indica la configurazione dell’assembly (ad esempio finale o debug)
  • AssemblyDefaultAliasAttribute: permette di specificare l’alias predefinito che verrà utilizzato da altri assembly come riferimento all’assembly corrente.
  • AsemblyDescriptionAttribute: contiene la descrizione dell’assembly stesso
  • AssemblyTitleAttribute: consente di specificare un nome descrittivo per l’assembly.


icona articolo

Attributi relativi al nome sicuro



Un nome sicuro è costituito dall’identità dell’assembly (nome semplice, numero di versione, informazioni sulla lingua) nonchè da una chiave pubblica ed una firma digitale.

Il nome sicuro viene generato a partire dal file dell’assembly che contiene il manifesto utilizzando una chiave privata.

I nomi sicuri soddisfano i seguenti requisiti:
  • garantiscono l’univocità dei nomi (in quanto basati su una coppia di chiavi univoche)
  • garantiscono la discendenza delle versioni di un assembly
  • garantiscono un conrtollo di integrità

I criteri di versione predefiniti del Common Language Runtime prevedono che l’applicazione venga eseguita soltanto con le versione con le quali è stata creata: è opportuno precisare che il controllo di versione viene effettuato soltanto sugli assembly con nome sicuro.

Gli attributi relativi al nome sicuro di un assembly sono:
  • AssemblyDelaySignAttribute: valore booleano che indica il ritardo della firma
  • AssemblyKeyFileAttribute: consente di indicare il nome del file contenete la chiave pubblica
  • AssemblyKeyNameAttribute: Indica il contenitore di chiave contenente la coppia di chiavi passata come parametro al costruttore dell’attributo.


icona articolo

Global Assembly Cache



Quando è necessario condividere un assembly fra più applicazioni è possibile inserirlo nella Global Assembly Cache (GAC) utilizzando un programma di installazione in grado di gestire la GAC oppure utilizzando lo strumento gacutil.exe fornito insieme al framework .NET.
icona ultimi articoli

Link Utili