Resurser i .NET-appar

Nästan alla appar av produktionskvalitet måste använda resurser. En resurs är alla icke-körbara data som distribueras logiskt med en app. En resurs kan visas i en app som felmeddelanden eller som en del av användargränssnittet. Resurser kan innehålla data i ett antal formulär, inklusive strängar, bilder och beständiga objekt. (Om du vill skriva beständiga objekt till en resursfil måste objekten vara serialiserbara.) Genom att lagra dina data i en resursfil kan du ändra data utan att kompilera om hela appen. Det gör också att du kan lagra data på en enda plats och eliminerar behovet av att förlita sig på hårdkodade data som lagras på flera platser.

.NET ger omfattande stöd för skapande och lokalisering av resurser. Dessutom stöder .NET en enkel modell för att paketera och distribuera lokaliserade resurser.

Skapa och lokalisera resurser

I en icke-lokaliserad app kan du använda resursfiler som en lagringsplats för appdata, särskilt för strängar som annars kan vara hårdkodade på flera platser i källkoden. Oftast skapar du resurser som textfiler (.txt) eller XML-filer (.resx) och använder Resgen.exe (Resursfilgenerator) för att kompilera dem till binära .resources-filer. Dessa filer kan sedan bäddas in i appens körbara fil av en språkkompilator. Mer information om hur du skapar resurser finns i Skapa resursfiler.

Du kan också lokalisera appens resurser för specifika kulturer. På så sätt kan du skapa lokaliserade (översatta) versioner av dina appar. När du utvecklar en app som använder lokaliserade resurser anger du en kultur som fungerar som neutral kultur eller reservkultur vars resurser används om inga lämpliga resurser är tillgängliga. Vanligtvis lagras resurserna i den neutrala kulturen i appens körbara fil. Återstående resurser för enskilda lokaliserade kulturer lagras i fristående satellitsammansättningar. Mer information finns i Skapa satellitsammansättningar.

Paketera och distribuera resurser

Du distribuerar lokaliserade appresurser i satellitsammansättningar. En satellitsammansättning innehåller resurser från en enda kultur. den innehåller ingen appkod. I distributionsmodellen för satellitsammansättning skapar du en app med en standardsammansättning (som vanligtvis är huvudsammansättningen) och en satellitsammansättning för varje kultur som appen stöder. Eftersom satellitsammansättningarna inte ingår i huvudsammansättningen kan du enkelt ersätta eller uppdatera resurser som motsvarar en specifik kultur utan att ersätta appens huvudsammansättning.

Bestäm noggrant vilka resurser som ska utgöra appens standardresurssammansättning. Eftersom det är en del av huvudsammansättningen kräver alla ändringar i den att du ersätter huvudsammansättningen. Om du inte anger någon standardresurs utlöses ett undantag när återställningsprocessen för resursen försöker hitta den. I en väldesignad app bör användning av resurser aldrig utlösa ett undantag.

Mer information finns i artikeln Paketering och distribution av resurser .

Hämta resurser

Vid körning läser en app in lämpliga lokaliserade resurser per tråd baserat på den kultur som anges av CultureInfo.CurrentUICulture egenskapen. Det här egenskapsvärdet härleds enligt följande:

  • Genom att direkt tilldela ett CultureInfo objekt som representerar den lokaliserade kulturen till Thread.CurrentUICulture egenskapen.

  • Om en kultur inte uttryckligen tilldelas, genom att hämta standardtrådens användargränssnittskultur från CultureInfo.DefaultThreadCurrentUICulture egenskapen.

  • Om en standardtrådsgränssnittskultur inte uttryckligen tilldelas genom att hämta kulturen för den aktuella användaren på den lokala datorn. .NET-implementeringar som körs i Windows gör detta genom att anropa Windows-funktionen GetUserDefaultUILanguage .

Mer information om hur den aktuella användargränssnittskulturen anges finns på referenssidorna CultureInfo och CultureInfo.CurrentUICulture .

Du kan sedan hämta resurser för den aktuella användargränssnittskulturen eller för en specifik kultur med hjälp System.Resources.ResourceManager av klassen . ResourceManager Även om klassen används oftast för att hämta resurser innehåller System.Resources namnområdet ytterligare typer som du kan använda för att hämta resurser. Dessa kan vara:

  • Klassen ResourceReader , som gör att du kan räkna upp resurser som är inbäddade i en sammansättning eller lagras i en fristående binär .resources-fil. Det är användbart när du inte känner till de exakta namnen på de resurser som är tillgängliga vid körning.

  • Klassen ResXResourceReader som gör att du kan hämta resurser från en XML-fil (.resx).

  • Klassen ResourceSet , som gör att du kan hämta resurserna i en viss kultur utan att följa reservregler. Resurserna kan lagras i en sammansättning eller en fristående binär .resources-fil. Du kan också utveckla en IResourceReader implementering som gör att du kan använda ResourceSet klassen för att hämta resurser från någon annan källa.

  • Klassen ResXResourceSet som gör att du kan hämta alla objekt i en XML-resursfil till minnet.

Se även