Concetti di base sulle risorse

Molti aspetti della programmazione con .NET Framework sono uguali per tutti i linguaggi compatibili, poiché il compilatore di ciascuno dei linguaggi supportati produce codice MSIL (Microsoft Intermediate Language) gestito autodescrittivo. Tutto il codice MSIL viene eseguito nell'ambiente Common Language Runtime che fornisce integrazione tra i diversi linguaggi, gestione automatica della memoria, gestione delle eccezioni nei diversi linguaggi, maggiore protezione e un modello semplificato per l'interazione tra componenti. Oltre al runtime, .NET Framework include la libreria di classi di .NET Framework, a cui è possibile accedere da qualsiasi linguaggio compatibile con .NET. Diversi aspetti di questo processo di sviluppo comune sono particolarmente importanti nella generazione di applicazioni che utilizzano risorse.

Concetti di base

Anche le librerie di classi di .NET Framework personalizzate sono organizzate in spazi dei nomi gerarchici e sono memorizzate in file eseguibili portabili (PE, Portable Executable), generalmente DLL ed EXE. In un file PE è possibile includere più spazi dei nomi, compresi gli spazi dei nomi nidificati, e uno spazio dei nomi può essere suddiviso in più file PE. Per creare un assembly, ovvero un'unità fisica che può essere distribuita e riutilizzata e alla quale è possibile applicare un numero di versione, vengono uniti uno o più file PE ed eventualmente altri tipi di file, come i file di risorse. L'ambiente Runtime utilizza assembly per individuare e associare i tipi a cui si fa riferimento. Per comodità, le risorse possono anche essere associate negli assembly oppure è possibile crearne un package separato in diversi formati o utilizzarle come singoli file, ad esempio file JPEG. Informazioni più dettagliate sul contenuto di un assembly, comprese classi e risorse, sono disponibili nel manifesto assembly

Lingue

In .NET Framework la lingua dell'utente può essere facoltativamente combinata al paese dell'utente. Specificando una lingua, è possibile utilizzare un insieme di preferenze comuni per determinate informazioni, quali stringhe, formati della data e formati numerici, che corrispondono alle convenzioni della lingua e al paese dell'utente.

Nei casi in cui un paese non è ufficialmente riconosciuto, il termine geopoliticamente più corretto da utilizzare è area geografica e non paese. La lingua e il paese possono essere specificati dai codici definiti nel documento RFC (Internet Requests for Comments) 1766 intitolato "Tags for the Identification of Languages" (informazioni in lingua inglese). I codici effettivi sono definiti da due standard ISO: ISO 639, "Code for the representation of names of languages" e ISO 3166 "Codes for the representation of names of countries" (informazioni in lingua inglese). Per ulteriori informazioni di riferimento sugli standard appena citati, vedere l'argomento "Tag della lingua e del paese" nell'Appendice A: ulteriori informazioni sulle risorse.

È possibile accedere alle preferenze dettagliate delle lingue utilizzando istanze della classe CultureInfo, a cui a loro volta si accede utilizzando tag della lingua. I tag della lingua utilizzano il formato primario[-secondario], in cui il tag primario è la lingua e il tag secondario facoltativo è il codice del paese. Per convenzione, il tag della lingua è composto da due lettere minuscole e il tag del paese è composto da due lettere maiuscole. Nella tabella riportata di seguito sono illustrati esempi di tag della lingua.

de Tedesco
de-AT Tedesco (Austria)
de-CH Tedesco (Svizzera)
en Inglese
en-US Inglese (Stati Uniti)
en-AU Inglese (Australia)
en-CA Inglese (Canada)
fr Francese
sp Spagnolo

In .NET Framework, i tag a due lettere indicano lingue non associate ad alcun paese, ad esempio de per il tedesco. I tag a quattro lettere indicano una lingua specifica, ad esempio fr-CA per il francese parlato in Canada. In molte situazioni l'interfaccia utente è specificata come una lingua specifica. In alcuni casi, però, ad esempio ja-JP per Giapponese (Giappone), è disponibile una sola lingua specifica per una determinata lingua non associata ad alcun paese e, in tal caso, i due tag vengono spesso utilizzati alternativamente. Se è necessario che in un'applicazione venga impostata una lingua specifica, ad esempio in risposta a un'impostazione del browser Internet, il metodo CreateSpecificCulture consente di mettere in corrispondenza lingue non associate ad alcun paese e lingue specifiche.

Il concetto di lingua in .NET Framework sostituisce l'impostazione internazionale NLS (national language support) che utilizzava un sistema di codici LCID (ID lingua). La proprietà LCID della classe CultureInfo offre l'interoperabilità e facilita l'integrazione con software basato su NLS.

Classi di risorse .NET

La libreria di classi di .NET Framework offre diverse classi che consentono agli sviluppatori di utilizzare le risorse nelle applicazioni e negli strumenti sviluppati.

La classe ResourceManager

La classe ResourceManager, nello spazio dei nomi System.Resources, consente di accedere agevolmente a risorse appropriate alla lingua in fase di esecuzione. Questa classe fornisce fallback delle risorse (generalmente alla lingua non associata ad alcun paese) quando una risorsa localizzata non esiste, supporta la serializzazione delle risorse e fornisce il metodo CreateFileBasedResourceManager per consentire l'accesso alle risorse che non sono state inserite nell'assembly. Naturalmente gli sviluppatori possono anche derivare classi da ResourceManager durante la creazione di soluzioni delle risorse personalizzate.

Classe ResourceWriter

La classe ResourceWriter, nello spazio dei nomi System.Resources, scrive risorse nel formato predefinito del sistema in un file o flusso di output. Le risorse sono specificate come coppie nome/valore utilizzando il metodo AddResource. I nomi delle risorse tengono conto della distinzione tra maiuscole e minuscole quando vengono utilizzati per le ricerche, ma una classe ResourceWriter non scrive un nome di risorsa in un file RESOURCES se le differenze sono riscontrabili solo nella combinazione di lettere maiuscole/minuscole. La classe ResourceWriter fornisce un'implementazione predefinita dell'interfaccia IResourceWriter e può essere sottoposta a override dallo sviluppatore.

**Nota   **Le risorse non sono scritte necessariamente nello stesso ordine in cui sono state aggiunte a livello di codice.

Classe ResourceReader

La classe ResourceReader, nello spazio dei nomi System.Resources, enumera i file RESOURCES e i flussi e legge le coppie nome/valore sequenziali delle risorse. Questa classe fornisce un'implementazione predefinita dell'interfaccia IresourceReader, di cui, come nella classe ResourceWriter, lo sviluppatore può eseguire l'override.

Classe ResourceSet

La classe ResourceSet, nello spazio dei nomi System.Resources, memorizza tutte le risorse che vengono localizzate per una determinata lingua. Tutte le risorse vengono immediatamente caricate in memoria. A differenza di ResourceManager, della classe ResourceSet non viene eseguito il fallback. Pertanto la risorsa ResourceSet risulta utile principalmente durante la creazione di strumenti e utilità ma non in applicazioni localizzate. La classe ResourceSet può essere utilizzata anche per controllare l'inserimento nella cache delle risorse, ad esempio, per impedire l'inserimento di immagini nella cache.

Classe CultureInfo

La classe CultureInfo, nello spazio dei nomi System.Globalization, contiene semplicemente un insieme di informazioni relative alle preferenze dell'utente, che dipendono dalla lingua, sublingua, paese e convenzioni culturali dell'utente. Questa classe viene utilizzata per formattare date, ore e numeri, ordinare stringhe e determinare la scelta della lingua per il testo.

Classe RegionInfo

La classe RegionInfo, nello spazio dei nomi System.Globalization, viene utilizzata per determinare l'unità di misura e per associare i codici delle regioni ai nomi delle regioni.

Metodo Assembly.GetManifestResourceStream

Il metodo Assembly.GetManifestResourceStream, nello spazio dei nomi System.Reflection, carica i dati della risorsa manifesto in un flusso. Questo è particolarmente utile quando le risorse sono memorizzate in formati personalizzati, che una ResourceManager potrebbe non comprendere a livello nativo.

**Nota   **Per utilizzare il metodo Assembly.GetManifestResourceStream, le risorse devono essere contenute in un assembly.

Proprietà Thread.CurrentUICulture

La proprietà Thread.CurrentUICulture, nello spazio dei nomi System.Threading, risulta utile quando è necessario determinare la lingua corrente o, ancora più importante, per impostare la lingua per emulare l'esecuzione in una versione localizzata di Windows differente. Questa operazione è necessaria in quanto nel Pannello di controllo non è possibile visualizzare più LCID dell'interfaccia utente in una versione di Windows 2000 in cui non è disponibile un'interfaccia utente multilingue. Al contrario, la lingua può essere impostata a livello di codice in fase di esecuzione in base ai singoli thread.

Distribuzione

Nel caso più semplice un file eseguibile .NET Framework autonomo può essere eseguito localmente su qualsiasi computer in cui sia già installato Common Language Runtime. Non è necessario eseguire altre operazioni in quanto non viene creata alcuna voce del Registro di sistema e le altre applicazioni non possono essere interrotte o arrestate nell'esecuzione. È sufficiente eliminare il file (se è stato copiato localmente) per rimuovere l'applicazione e non lasciare "tracce" nel computer. Le applicazioni eseguite da un URL che rappresenta un sito Web hanno un comportamento leggermente diverso. In questi casi, gli assembly vengono installati nella cache di download e vengono successivamente eliminati automaticamente. Tutte le altre applicazioni, incluse quelle provenienti da un URL che rappresenta un file, vengono eseguite da codice sorgente e non vengono inserite nella cache del computer locale.

Distribuzione

Per la maggior parte delle applicazioni client verranno naturalmente creati ulteriori package in un formato di distribuzione comune, come i file CAB o MSI, e molte saranno installate utilizzando meccanismi di distribuzione di applicazioni come Windows 2000 IntelliMirror o Microsoft Systems Management Server (SMS), che si avvalgono entrambi della tecnologia Microsoft Installer. Per ulteriori informazioni su Microsoft Installer, fare riferimento alla sezione corrispondente in Win32 SDK.

Vedere anche

Creazione di risorse | Recupero di risorse tramite codice | Riepilogo delle risorse | Appendice A: ulteriori informazioni sulle risorse | Appendice B: strumenti delle risorse