Sdílet prostřednictvím


Načítání prostředků v satelitních sestaveních

Ideální přístup je zabalit prostředky pro výchozí nebo neutrální sestavení s hlavním sestavením a vytvořit samostatné satelitní sestavení pro každý jazyk, který aplikace podporuje. Třída ResourceManager poskytuje za běhu přístup k prostředkům konkrétní jazykové verze a řídí, jak aplikace načte prostředky pomocí nouzového procesu prostředků. Další informace naleznete v dílčím tématu "Proces nouzového prostředku" v tématu Balení a nasazení prostředků. Doporučujeme přístup k prostředkům prostřednictvím jednoho z konstruktorů třídy ResourceManager. To vyžaduje, aby prostředky byly buďto zkompilovány do satelitních sestavení, nebo jako část hlavního sestavení aplikace.

ResourceManager určuje, které prostředky se mají načíst na základě hodnoty vlastnosti CultureInfo.CurrentUICulture aktuálního vlákna. Například v případě, že je aplikace kompilována s výchozími anglickými prostředky a dvěma satelitními sestaveními, které obsahují francouzské a německé jazykové prostředky a vlastnost CurrentUICulture je nastavena na "de", ResourceManager načte německé prostředky. Další informace o způsobu nastavení vlastnosti CurrentUICulture naleznete v tématu Použití vlastnosti CurrentUICulture.

Následující příklad používá metodu ResourceManager.GetString k načtení a zobrazení prostředku řetězce.

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyStrings", Me.GetType().Assembly)
Console.Writeline(rm.GetString("string1"))
…
…
private ResourceManager rm;
rm = new ResourceManager("MyStrings", this.GetType().Assembly);
Console.Writeline(rm.GetString("string1"));
…

Tento kód načte a zobrazí string1 ze souboru MyStrings. Který konkrétní řetězec bude načten závisí na hodnotě vlastnosti CurrentUICulture aktuálního vlákna.

Následující příklad používá metodu ResourceManager.GetObject k načtení a zobrazení binárního prostředku (například obrázku).

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyImages", Me.GetType().Assembly)
PictureBox.Image = Ctype(rm.GetObject("MyObject"), System.Drawing.Image)
…
…
private ResourceManager rm;
rm = new ResourceManager("MyImages", this.GetType().Assembly);
PictureBox.Image = (System.Drawing.Image)rm.GetObject("MyObject");
…

Tento kód načte objekt s názvem MyObject ze souboru prostředků MyImages. Příklad přetypuje MyObject na typ Image a přiřadí jej do vlastnosti image objektu PictureBox. Který konkrétní řetězec bude načten závisí na hodnotě vlastnosti CurrentUICulture aktuálního vlákna.

Třída ResourceSet ukládá všechny prostředky lokalizovány do jedné jazykové verze. ResourceSet nepoužívá proces nalezení záložního prostředku. Proto třída ResourceSet není v lokalizované aplikací použitelná.

Podpora správy verzí pro satelitní sestavení

Ve výchozím nastavení, pokud ResourceManager načítá požadované prostředky, hledá satelitní sestavení s číslem verze odpovídajícím číslu verze hlavního sestavení. Po nasazení aplikace, můžete chtít aktualizovat hlavní sestavení nebo konkrétní sestavení satelitní s prostředky. Rozhraní .NET Framework poskytuje podporu pro správu verzí hlavního sestavení a satelitních sestavení.

Třída SatelliteContractVersionAttribute podporuje správu verzí hlavního sestavení. Určením SatelliteContractVersionAttribute u hlavního sestavení aplikace je umožněno aktualizovat a znovu nasadit hlavní sestavení bez nutnosti aktualizace jeho satelitních sestavení. Po aktualizaci hlavního sestavení je potřeba zvýšit číslo verze hlavního sestavení, ale ponechat stejné číslo verze typu contract. Když ResourceManager načítá požadované prostředky, načte verzi satelitního sestavení, danou tímto atributem.

Sestavení zásad vydavatele poskytují podporu pro správu verzí satelitních sestavení. Můžete aktualizovat a znovu nasadit satelitní sestavení bez nutnosti aktualizace hlavního sestavení. Po aktualizace satelitního sestavení je potřeba zvýšit jeho číslo verze a dodat jej spolu se sestavením zásad vydavatele. V sestavení zásad vydavatele, určíte, že nové satelitní sestavení je zpětně kompatibilní s jeho předchozí verzí. Přestože ResourceManager používá k načtení požadovaných prostředků existující číslo verze typu contract z hlavního sestavení, bude načtena správná aktualizovaná verze sestavení, protože modul načítající sestavení bude brát v úvahu verzi satelitního sestavení, zadanou v sestavení zásad vydavatele. Další informace o sestavení zásad vydavatele naleznete v tématu Vytvoření souboru zásad vydavatele.

Pro plnou podporu správy verzí sestavení, je vhodné nasazovat silně pojmenované sestavení do globální mezipaměť sestavení (GAC) a sestavení nepojmenované silně nasazovat do adresáře aplikace. Pokud chcete nasadit silně pojmenované sestavení v adresáři aplikace, nebude při aktualizaci sestavení možno zvýšit číslo verze satelitního sestavení. Místo toho je nutné provést aktualizace na místě, kde je nahrazen existující kód aktualizovaným kódem a zachovat stejné číslo verze. Například pokud chcete aktualizovat verzi 1.0.0.0 satelitního sestavení s název plně zadané názvem sestavení "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a", přepiště jej aktualizovanou knihovnou myApp.resources.dll, která byla zkompilována se stejným plně zadaným názvem sestavení "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a". Všimněte si, že jelikož číslo verze nemůže být zvýšeno, aktualizace na místě pro soubory satelitního sestavení ztěžuje aplikaci přesné určení verze satelitního sestavení.

Další informace o správě verzí sestavení naleznete v tématech Správa verzí sestavení a How the Runtime Locates Assemblies.

Viz také

Odkaz

ResourceManager

Koncepty

Prostředky v aplikacích

Balení a nasazení prostředků

How the Runtime Locates Assemblies

Získávání zdrojů v souborech RESOURCES