Risorse nelle app .NETResources in .NET Apps

L'utilizzo di risorse è richiesto in quasi tutte le applicazioni destinate a un impiego professionale.Nearly every production-quality app has to use resources. Una risorsa è costituita da dati non eseguibili che vengono distribuiti in modo logico con un'applicazione.A resource is any nonexecutable data that is logically deployed with an app. Una risorsa può essere visualizzata in un'applicazione sotto forma di messaggi di errore o come parte dell'interfaccia utente.A resource might be displayed in an app as error messages or as part of the user interface. Le risorse possono contenere dati in diversi formati, tra cui stringhe, immagini e oggetti persistenti.Resources can contain data in a number of forms, including strings, images, and persisted objects. Per scrivere oggetti salvati in modo permanente in un file di risorse, gli oggetti devono essere serializzabili. L'archiviazione dei dati in un file di risorse consente di modificare i dati senza ricompilare l'intera app.(To write persisted objects to a resource file, the objects must be serializable.) Storing your data in a resource file enables you to change the data without recompiling your entire app. Inoltre permette di archiviare i dati in un'unica posizione e non è più necessario basarsi sui dati specificati a livello di codice archiviati in più posizioni.It also enables you to store data in a single location, and eliminates the need to rely on hard-coded data that is stored in multiple locations.

.NET Framework e .NET Core offrono ampio supporto per la creazione e la localizzazione di risorse.The .NET Framework and .NET Core provide comprehensive support for the creation and localization of resources. .NET supporta inoltre un modello semplice per la creazione del pacchetto di risorse localizzate e la relativa distribuzione.In addition, .NET supports a simple model for packaging and deploying localized resources.

Per informazioni sulle risorse in ASP.NET, vedere Cenni preliminari sulle risorse delle pagine Web ASP.NET.For information about resources in ASP.NET, see ASP.NET Web Page Resources Overview.

Creazione e localizzazione di risorseCreating and Localizing Resources

In un'applicazione non localizzata, è possibile utilizzare i file di risorse come repository per i dati dell'applicazione, in particolare per le stringhe che altrimenti possono essere hard-coded in più posizioni nel codice sorgente.In a non-localized app, you can use resource files as a repository for app data, particularly for strings that might otherwise be hard-coded in multiple locations in source code. In genere, le risorse vengono create come testo, con estensione txt o come o file XML (RESX) e si utilizza Resgen.exe (Resource File Generator) per compilarle in file binari con estensione resources.Most commonly, you create resources as either text (.txt) or XML (.resx) files, and use Resgen.exe (Resource File Generator) to compile them into binary .resources files. Questi file possono quindi essere incorporati nel file eseguibile dell'applicazione tramite un compilatore di linguaggio.These files can then be embedded in the app's executable file by a language compiler. Per altre informazioni sulla creazione di file di risorse, vedere Creazione di file di risorse.For more information about creating resources, see Creating Resource Files.

È anche possibile localizzare le risorse dell'applicazione per impostazioni cultura specifiche.You can also localize your app's resources for specific cultures. In questo modo è possibile compilare versioni localizzate (tradotte) delle applicazioni.This enables you to build localized (translated) versions of your apps. Quando si sviluppa un'applicazione in cui vengono utilizzate risorse localizzate, è possibile definire delle impostazioni cultura che fungono da impostazioni cultura non associate ad alcun paese o di fallback le cui risorse vengono utilizzate se non ve ne sono di appropriate.When you develop an app that uses localized resources, you designate a culture that serves as the neutral or fallback culture whose resources are used if no suitable resources are available. In genere, le risorse delle impostazioni cultura non associate ad alcun paese vengono archiviate nel file eseguibile dell'applicazione.Typically, the resources of the neutral culture are stored in the app's executable. Le risorse rimanenti per le singole impostazioni cultura localizzate vengono archiviate in assembly satellite autonomi.The remaining resources for individual localized cultures are stored in standalone satellite assemblies. Per altre informazioni, vedere Creazione di assembly satellite.For more information, see Creating Satellite Assemblies.

Creazione del pacchetto e distribuzione delle risorsePackaging and Deploying Resources

Si sviluppano risorse di applicazioni localizzate in assembly satellite.You deploy localized app resources in satellite assemblies. In un assembly satellite sono contenute le risorse di singole impostazioni cultura e non il codice dell'applicazione.A satellite assembly contains the resources of a single culture; it does not contain any app code. Nel modello di distribuzione dell'assembly satellite si crea un'applicazione con un assembly predefinito (in genere l'assembly principale) e un assembly satellite per tutte le impostazioni cultura supportate dall'applicazione.In the satellite assembly deployment model, you create an app with one default assembly (which is typically the main assembly) and one satellite assembly for each culture that the app supports. Poiché gli assembly satellite non fanno parte dell'assembly principale, è possibile sostituire o aggiornare facilmente le risorse corrispondenti a impostazioni cultura specifiche senza sostituire l'assembly principale dell'applicazione.Because the satellite assemblies are not part of the main assembly, you can easily replace or update resources corresponding to a specific culture without replacing the app's main assembly.

Determinare con attenzione le risorse che costituiranno l'assembly di risorse predefinito dell'applicazione.Carefully determine which resources will make up your app's default resource assembly. Poiché tale assembly fa parte dell'assembly principale, le eventuali modifiche apportate richiederanno la sostituzione dell'assembly principale.Because it is a part of the main assembly, any changes to it will require you to replace the main assembly. Se non viene fornita una risorsa predefinita, quando il processo di recupero di una risorsa di riserva proverà a cercarla verrà generata un'eccezione.If you do not provide a default resource, an exception will be thrown when the resource fallback process attempts to find it. In un'applicazione progettata correttamente, l'utilizzo delle risorse non deve mai generare un'eccezione.In a well-designed app, using resources should never throw an exception.

Per ulteriori informazioni, leggere l'articolo Creazione del package e distribuzione delle risorse.For more information, see the Packaging and Deploying Resources article.

Recupero di risorseRetrieving Resources

In fase di esecuzione, tramite un'applicazione vengono caricate le risorse localizzate appropriate per ciascun thread, in base alle impostazioni cultura specificate dalla proprietà CultureInfo.CurrentUICulture.At run time, an app loads the appropriate localized resources on a per-thread basis, based on the culture specified by the CultureInfo.CurrentUICulture property. Questo valore della proprietà viene derivato come segue:This property value is derived as follows:

  • Assegnando direttamente un oggetto CultureInfo che rappresenta le impostazioni cultura localizzate alla proprietà Thread.CurrentUICulture.By directly assigning a CultureInfo object that represents the localized culture to the Thread.CurrentUICulture property.

  • Se le impostazioni cultura non vengono assegnate in modo esplicito, recuperando le impostazioni cultura dell'interfaccia utente del thread predefinito dalla proprietà CultureInfo.DefaultThreadCurrentUICulture.If a culture is not explicitly assigned, by retrieving the default thread UI culture from the CultureInfo.DefaultThreadCurrentUICulture property.

  • Se le impostazioni cultura dell'interfaccia utente di un thread predefinito non vengono assegnate in modo esplicito, recuperando le impostazioni cultura per l'utente corrente del computer locale.If a default thread UI culture is not explicitly assigned, by retrieving the culture for the current user on the local computer. Nelle implementazioni .NET in esecuzione in Windows viene chiamata la funzione GetUserDefaultUILanguage di Windows..NET implementations running on Windows do this by calling the Windows GetUserDefaultUILanguage function.

Per ulteriori informazioni su come vengono impostate le impostazioni cultura correnti dell'interfaccia utente, vedere le pagine di riferimento CultureInfo e CultureInfo.CurrentUICulture.For more information about how the current UI culture is set, see the CultureInfo and CultureInfo.CurrentUICulture reference pages.

È quindi possibile recuperare le risorse per le impostazioni cultura correnti dell'interfaccia utente o per impostazioni cultura specifiche utilizzando la classe System.Resources.ResourceManager.You can then retrieve resources for the current UI culture or for a specific culture by using the System.Resources.ResourceManager class. Sebbene la classe ResourceManager sia maggiormente usata per il recupero delle risorse, nello spazio dei nomi System.Resources sono contenuti tipi aggiuntivi utilizzabili per recuperare le risorse.Although the ResourceManager class is most commonly used for retrieving resources, the System.Resources namespace contains additional types that you can use to retrieve resources. tra cui:These include:

  • La classe ResourceReader, che consente di enumerare le risorse incorporate in un assembly o archiviate in un file binario autonomo con estensione resources.The ResourceReader class, which enables you to enumerate resources embedded in an assembly or stored in a standalone binary .resources file. È utile quando non si conoscono i nomi esatti delle risorse disponibili in fase di esecuzione.It is useful when you don't know the precise names of the resources that are available at run time.

  • La classe ResXResourceReader che consente di recuperare le risorse da un file XML (con estensione resx).The ResXResourceReader class, which enables you to retrieve resources from an XML (.resx) file.

  • La classe ResourceSet che consente di recuperare le risorse di impostazioni cultura specifiche senza rispettare le regole di fallback.The ResourceSet class, which enables you to retrieve the resources of a specific culture without observing fallback rules. Le risorse possono essere archiviate in un assembly o un file binario autonomo con estensione resources.The resources can be stored in an assembly or a standalone binary .resources file. È inoltre possibile sviluppare un'implementazione dell'oggetto IResourceReader che consente di utilizzare la classe ResourceSet per recuperare le risorse da un'altra origine.You can also develop an IResourceReader implementation that enables you to use the ResourceSet class to retrieve resources from some other source.

  • La classe ResXResourceSet che consente di recuperare tutti gli elementi in un file di risorse XML in memoria.The ResXResourceSet class, which enables you to retrieve all the items in an XML resource file into memory.

Vedere ancheSee also