Questa documentazione è stata archiviata e non viene gestita.

Classe ResourceManager

Aggiornamento: novembre 2007

Fornisce un pratico accesso alle risorse specifiche delle impostazioni cultura in fase di esecuzione.

Spazio dei nomi:  System.Resources
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ResourceManager
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public class ResourceManager
public class ResourceManager

La classe ResourceManager cerca le risorse specifiche delle impostazioni cultura, consente di ripiegare su altre risorse quando una risorsa localizzata non esiste e supporta la serializzazione delle risorse.

Mediante i metodi di ResourceManager, un chiamante può accedere alle risorse di determinate impostazioni cultura con i metodi GetObject e GetString. In base all'impostazione predefinita, questi metodi restituiscono la risorsa delle impostazioni cultura determinate dalle impostazioni linguistiche correnti del thread che ha effettuato la chiamata. Per ulteriori informazioni, vedere Thread.CurrentUICulture. Un chiamante può utilizzare il metodo ResourceManager.GetResourceSet per ottenere un oggetto ResourceSet, che rappresenta le risorse per determinate impostazioni cultura, ignorando le regole di fallback relative alle impostazioni cultura. È quindi possibile utilizzare l'oggetto ResourceSet per accedere alle risorse localizzate di tali impostazioni cultura in base al nome.

Idealmente, occorre creare risorse per ogni lingua o almeno per un sottoinsieme significativo della lingua. I nomi dei file di risorse seguono la convenzione di denominazione nomebase.nomeLingua.resources, dove nomebase indica il nome dell'applicazione o di una classe, a seconda del livello di dettaglio desiderato. La proprietà Name dell'oggetto CultureInfo viene utilizzata per determinare il nomeLingua. Una risorsa per le impostazioni cultura di sistema, restituita da InvariantCulture, deve essere denominata nomebase.resources.

Si supponga ad esempio che un assembly contenga numerose risorse in un file di risorse con il nomebase "MyResources". Questi file di risorse avranno nomi come "MyResources.ja-JP.resources", "MyResources.de.resources", "MyResources.zh-CHS.resources" o "MyResources.fr-BE.resources", che contengono le risorse rispettivamente per le lingue giapponese, tedesca, cinese e francese (Belgio). Il file di risorse predefinito deve essere denominato MyResources.resources. Vengono in genere creati package dei file di risorse specifici delle impostazioni cultura in assembly satellite per tutte le impostazioni cultura. Il file di risorse predefinito deve trovarsi nell'assembly principale.

A questo punto, si supponga che sia stato creato un oggetto ResourceManager per rappresentare le risorse con questo nomebase. Utilizzando la classe ResourceManager, è possibile ottenere un oggetto ResourceSet che incapsula "MyResources.ja-JP.resources" chiamando GetResourceSet(new CultureInfo ("ja-JP"), TRUE, FALSE). In alternativa, se si è a conoscenza che "MyResources" contiene una risorsa denominata "TOOLBAR_ICON", è possibile ottenere il valore di tale risorsa localizzata per il Giappone chiamando GetObject("TOOLBAR_ICON", new CultureInfo("ja-JP")).

Benché non sia strettamente necessario per la maggior parte degli utilizzi di base della classe ResourceManager, gli assembly consegnati a livello pubblico devono utilizzare la classe SatelliteContractVersionAttribute per supportare la creazione di versioni dell'assembly principale senza ridistribuire i satelliti e la classe NeutralResourcesLanguageAttribute per evitare la ricerca di un assembly satellite potenzialmente inesistente.

Per ulteriori informazioni sul supporto della versione degli assembly satellite, vedere Recupero di risorse in assembly satellite. Per ulteriori informazioni sulla creazione di assembly satellite, vedere Creazione di assembly satellite. Per assistenza nella localizzazione di finestre di dialogo Windows Form, vedere lo strumento Editor di risorse di Windows Form (Winres.exe) in Windows Software Development Kit (SDK).

Per ulteriori informazioni sull'impostazione e la creazione di risorse, vedere Risorse nelle applicazioni.

Attenzione:

L'utilizzo di file resources autonomi in un'applicazione ASP.NET interrompe la distribuzione XCOPY, poiché le risorse rimangono bloccate finché non vengono rilasciate in modo esplicito dal metodo ReleaseAllResources. Per distribuire le risorse nelle applicazioni ASP.NET, è necessario compilare i file resources negli assembly satellite.

Attenzione:

Le risorse contrassegnate come private sono accessibili solo nell'assembly in cui vengono collocate. Poiché un assembly satellite non contiene codice, le risorse private di tale assembly non sono disponibili da alcun meccanismo. È pertanto necessario che le risorse negli assembly satellite siano sempre pubbliche in modo da essere accessibili dall'assembly principale. Le risorse incorporate nell'assembly principale sono accessibili a esso, che siano pubbliche o private.

Nodo <satelliteassemblies> nel file di configurazione

Per file eseguibili distribuiti ed eseguiti da un sito Web (file .exe HREF), la classe ResourceManager è in grado di eseguire un sondaggio sul Web per verificare la presenza di assembly satellite che possono influire negativamente sulle prestazioni dell'applicazione. È possibile limitare tale sondaggio agli assembly satellite distribuiti con l'applicazione in uso ed eliminare così il problema di prestazioni. A questo scopo, creare un nodo <satelliteassemblies> nel file di configurazione dell'applicazione per specificare l'avvenuta distribuzione di un set di impostazioni cultura specifico per l'applicazione e impedire il tentativo di verifica di impostazioni cultura non elencate nel nodo da parte della classe ResourceManager.

Nota:

L'alternativa migliore alla creazione di un nodo <satelliteassemblies> consiste nell'utilizzare la funzionalità Manifesto di distribuzione ClickOnce.

Creare una sezione del file di configurazione simile all'esempio di codice riportato di seguito:

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

Eseguire le seguenti operazioni nel file di configurazione:

  • Specificare uno o più nodi <assembly> per ciascun assembly principale distribuito, in cui l'attributo del nodo <assembly> specifica il nome completo dell'assembly. Specificare il nome dell'assembly principale invece di MainAssemblyName e specificare i valori degli attributi Version, PublicKeyToken e Culture che corrispondono all'assembly principale.

    Per l'attributo Version, specificare il numero di versione dell'assembly. Ad esempio, la prima versione dell'assembly potrebbe essere il numero 1.0.0.0.

    Per l'attributo PublicKeyToken, specificare la parola chiave "null" se l'assembly non è stato firmato con un nome sicuro oppure specificare il token di chiave pubblica se l'assembly è stato firmato.

    Per l'attributo Culture, specificare la parola chiave "neutral" per designare l'assembly principale e fare in modo che la classe ResourceManager verifichi solo la presenza delle impostazioni cultura elencate nei nodi <culture>.

    Per ulteriori informazioni sui nomi completi dell'assembly, vedere Nomi degli assembly. Per ulteriori informazioni sugli assembly con nome sicuro, vedere Creazione e utilizzo degli assembly con nome sicuro.

  • Specificare uno o più nodi <culture> con un nome di impostazioni cultura specifiche, ad esempio "fr-FR" oppure un nome di impostazioni cultura di sistema, ad esempio "fr".

    Attenzione:

    In .NET Framework versione 1.1, aggiungere al file di configurazione il gestore della sezione di configurazione riportato di seguito. Se si esegue l'aggiornamento dalla versione 1.1 alla versione 2.0 di .NET Framework, è necessario rimuovere tale gestore dal file di configurazione in quanto non supportato da .NET Framework 2.0.

       <configSections>
          <section name="satelliteassemblies" type="System.Configuration.IgnoreSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false" />
       </configSections>
    

Se sono necessarie risorse per un assembly non elencato nel nodo <satelliteassemblies>, la classe ResourceManager verifica la presenza di impostazioni cultura mediante regole di verifica standard.

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di impostazioni cultura esplicite e delle attuali impostazioni cultura di interfaccia utente implicite per ottenere risorse di stringa dall'assembly principale e un assembly satellite. Per ulteriori informazioni, vedere l'argomento secondario relativo ai percorsi di directory per assembly satellite non installati nella Global Assembly Cache dell'argomento Creazione di assembly satellite.

// This code example demonstrates the ResourceManager() 
// constructor and ResourceManager.GetString() method.

using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

/*
Perform the following steps to use this code example:

Main assembly:
1) In a main directory, create a file named "rmc.txt" that 
contains the following resource strings:

day=Friday
year=2006
holiday="Cinco de Mayo"

2) Use the resgen.exe tool to generate the "rmc.resources" 
resource file from the "rmc.txt" input file.

> resgen rmc.txt

Satellite Assembly:
3) Create a subdirectory of the main directory and name the 
subdirectory "es-MX", which is the culture name of the 
satellite assembly.

4) Create a file named "rmc.es-MX.txt" that contains the 
following resource strings:

day=Viernes
year=2006
holiday="Cinco de Mayo"

5) Use the resgen.exe tool to generate the "rmc.es-MX.resources" 
resource file from the "rmc.es-MX.txt" input file.

> resgen rmc.es-MX.txt

6) Use the al.exe tool to create a satellite assembly. If the 
base name of the application is "rmc", the satellite assembly 
name must be "rmc.resources.dll". Also, specify the culture, 
which is es-MX.

> al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll 

7) Assume the filename for this code example is "rmc.cs". Compile 
rmc.cs and embed the main assembly resource file, rmc.resources, in 
the executable assembly, rmc.exe:

>csc /res:rmc.resources rmc.cs

8) Execute rmc.exe, which obtains and displays the embedded 
resource strings.
*/

class Sample 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

// Create a resource manager. The GetExecutingAssembly() method
// gets rmc.exe as an Assembly object.

    ResourceManager rm = new ResourceManager("rmc", 
                             Assembly.GetExecutingAssembly());

// Obtain resources using the current UI culture.
    Console.WriteLine("Obtain resources using the current UI culture.");

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message.

    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

// Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

// Get the resource strings for the day, year, and holiday 
// using the specified culture. Use those strings to 
// display a message. 

// Obtain resources using the es-MX culture.
    Console.WriteLine("Obtain resources using the es-MX culture.");

    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);

// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------

// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}

/*
This code example produces the following results:

>rmc
Obtain resources using the current UI culture.
"5th of May" will occur on Friday in 2006.

Obtain resources using the es-MX culture.
"Cinco de Mayo" will occur on Viernes in 2006.

*/


Questo tipo è thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC, Xbox 360

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supportato in: 3.5, 2.0, 1.0

XNA Framework

Supportato in: 2.0, 1.0
Mostra: