Vytváření satelitních sestavení pro aplikace .NET
Soubory prostředků hrají ústřední roli v lokalizovaných aplikacích. Umožňují aplikaci zobrazit řetězce, obrázky a další data v jazyce a jazykové verzi uživatele a poskytnout alternativní data, pokud prostředky pro jazyk nebo jazykovou verzi uživatele nejsou k dispozici. .NET používá hvězdicový model k vyhledání a načtení lokalizovaných prostředků. Centrum je hlavní sestavení, které obsahuje nelokalizovatelný spustitelný kód a prostředky pro jednu jazykovou verzi, která se nazývá neutrální nebo výchozí jazyková verze. Výchozí jazyková verze je záložní jazyková verze aplikace; používá se, když nejsou k dispozici žádné lokalizované prostředky. Pomocí atributu NeutralResourcesLanguageAttribute určíte jazykovou verzi výchozí jazykové verze aplikace. Každý paprsk se připojuje k satelitnímu sestavení, které obsahuje prostředky pro jednu lokalizovanou jazykovou verzi, ale neobsahuje žádný kód. Vzhledem k tomu, že satelitní sestavení nejsou součástí hlavního sestavení, můžete snadno aktualizovat nebo nahradit prostředky, které odpovídají určité jazykové verzi, aniž byste nahradili hlavní sestavení aplikace.
Poznámka:
Prostředky výchozí jazykové verze aplikace lze také uložit do satelitního sestavení. Uděláte to tak, že atribut přiřadíte NeutralResourcesLanguageAttribute hodnotu UltimateResourceFallbackLocation.Satellite.
Název a umístění satelitního sestavení
Hvězdicový model vyžaduje, abyste prostředky umístili do konkrétních umístění, aby se mohly snadno nacházet a používat. Pokud prostředky zkompilujete a pojmenujete podle očekávání nebo pokud je neumisťujete do správných umístění, modul runtime common language je nebude moct najít a místo toho bude používat prostředky výchozí jazykové verze. Správce prostředků .NET je reprezentován typem ResourceManager a používá se k automatickému přístupu k lokalizovaným prostředkům. Správce prostředků vyžaduje následující:
Jedno satelitní sestavení musí obsahovat všechny prostředky pro určitou jazykovou verzi. Jinými slovy, měli byste zkompilovat více souborů .txt nebo .resx do jednoho binárního souboru .resources .
V adresáři aplikace musí existovat samostatný podadresář pro každou lokalizovanou jazykovou verzi, která ukládá prostředky dané jazykové verze. Název podadresáře musí být stejný jako název jazykové verze. Můžete také ukládat satelitní sestavení do globální mezipaměti sestavení. V tomto případě musí komponenta informací o jazykové verzi silného názvu sestavení indikovat její jazykovou verzi. Další informace naleznete v tématu Instalace satelitních sestavení v globální mezipaměti sestavení (Global Assembly Cache).
Poznámka:
Pokud vaše aplikace obsahuje prostředky pro subcultures, umístěte každou podadresář do samostatného podadresáře pod adresář aplikace. Pod adresářem hlavní jazykové verze neumisťujte podadresáře podadresáře.
Satelitní sestavení musí mít stejný název jako aplikace a musí používat příponu názvu souboru ".resources.dll". Pokud je například aplikace pojmenována Example.exe, měl by být název každého satelitního sestavení Example.resources.dll. Název satelitního sestavení neznačí jazykovou verzi souborů prostředků. Satelitní sestavení se však zobrazí v adresáři, který určuje jazykovou verzi.
Informace o jazykové verzi satelitního sestavení musí být zahrnuty v metadatech sestavení. Chcete-li název jazykové verze uložit do metadat satelitního sestavení, zadáte
/culture
možnost při použití Assembly Linker pro vložení prostředků do satelitního sestavení.
Následující obrázek ukazuje ukázkovou adresářovou strukturu a požadavky na umístění pro aplikace, které neinstalujete v globální mezipaměti sestavení. Položky s rozšířeními .txt a .resources se nedoručí s konečnou aplikací. Jedná se o zprostředkující soubory prostředků, které slouží k vytvoření konečných sestavení satelitních prostředků. V tomto příkladu můžete nahradit soubory .resx pro .txt soubory. Další informace najdete v tématu Balení a nasazení prostředků.
Následující obrázek znázorňuje adresář satelitního sestavení:
Kompilace satelitních sestavení
Generátor souborů prostředků (resgen.exe) slouží ke kompilaci textových souborů nebo souborů XML (.resx), které obsahují prostředky do binárních souborů .resources. Potom použijete Assembly Linker (al.exe) ke kompilaci souborů .resources do satelitních sestavení. al.exe vytvoří sestavení ze zadaných souborů .resources. Satelitní sestavení mohou obsahovat pouze prostředky; nemohou obsahovat žádný spustitelný kód.
Následující příkaz al.exe vytvoří satelitní sestavení pro aplikaci Example
z německého souboru resources strings.de.resources.
al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll
Následující příkaz al.exe také vytvoří satelitní sestavení pro aplikaci Example
ze souboru strings.de.resources. Možnost /template způsobí, že satelitní sestavení dědí všechna metadata sestavení s výjimkou informací o jazykové verzi z nadřazeného sestavení (Example.dll).
al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll -template:Example.dll
Následující tabulka popisuje al.exe možnosti použité v těchto příkazech podrobněji:
Možnost | Popis |
---|---|
-target:lib |
Určuje, že satelitní sestavení je kompilováno do souboru knihovny (.dll). Vzhledem k tomu, že satelitní sestavení neobsahuje spustitelný kód a není hlavním sestavením aplikace, je nutné uložit satelitní sestavení jako knihovny DLL. |
-embed:strings.de.resources |
Určuje název souboru prostředků, který se má vložit při al.exe kompiluje sestavení. Do satelitního sestavení můžete vložit několik souborů .resources, ale pokud sledujete model hvězdicové architektury, musíte pro každou jazykovou verzi zkompilovat jedno satelitní sestavení. Pro řetězce a objekty však můžete vytvořit samostatné soubory .resources. |
-culture:de |
Určuje jazykovou verzi prostředku, která se má zkompilovat. Modul CLR (Common Language Runtime) používá tyto informace při hledání prostředků pro zadanou jazykovou verzi. Pokud tuto možnost vynecháte, al.exe prostředek zkompiluje, ale modul runtime ho nebude moct najít, když ho uživatel požádá. |
-out:Example.resources.dll |
Určuje název výstupního souboru. Název musí následovat po pojmenování standard baseName.resources.extension, where baseName je název hlavního sestavení a přípona je platná přípona názvu souboru (například .dll). Modul runtime nemůže určit jazykovou verzi satelitního sestavení na základě názvu výstupního souboru; K jeho zadání je nutné použít možnost /culture . |
-template:Example.dll |
Určuje sestavení, ze kterého bude satelitní sestavení dědit všechna metadata sestavení s výjimkou pole jazykové verze. Tato možnost má vliv na satelitní sestavení pouze v případě, že zadáte sestavení se silným názvem. |
Úplný seznam možností dostupných pro al.exe najdete v tématu Linker sestavení (al.exe).
Poznámka:
Může docházet k tomu, že budete chtít k kompilaci satelitních sestavení použít úlohu .NET Core MSBuild, i když cílíte na rozhraní .NET Framework. Můžete například použít deterministickou možnost kompilátoru jazyka C#, abyste mohli porovnávat sestavení z různých sestavení. V tomto případě nastavte GenerateSatelliteAssembliesForCore do true
souboru .csproj pro generování satelitních sestavení pomocí csc.exe místo Al.exe (Linker sestavení).
<Project>
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
</Project>
Úloha .NET Core MSBuild používá csc.exe místo al.exe ke generování satelitních sestavení ve výchozím nastavení. Další informace naleznete v tématu Usnadnění přihlášení k generování satelitního sestavení Core.
Příklad satelitních sestavení
Následuje jednoduchý příklad "Hello world", který zobrazí pole se zprávou obsahující lokalizovaný pozdrav. Příklad obsahuje zdroje pro jazykové verze angličtiny (USA), francouzštiny (Francie) a ruštiny (Rusko) a její záložní jazykovou verzi je angličtina. Pokud chcete vytvořit příklad, postupujte takto:
Vytvořte soubor prostředku s názvem Greeting.resx nebo Greeting.txt , který bude obsahovat prostředek pro výchozí jazykovou verzi. Do tohoto souboru uložte jeden řetězec s názvem
HelloString
"Hello world!".Chcete-li označit, že angličtina (en) je výchozí jazyková verze aplikace, přidejte následující System.Resources.NeutralResourcesLanguageAttribute atribut do souboru AssemblyInfo aplikace nebo do hlavního souboru zdrojového kódu, který bude zkompilován do hlavního sestavení aplikace.
[assembly: NeutralResourcesLanguage("en")]
<Assembly: NeutralResourcesLanguage("en")>
Do aplikace přidejte podporu dalších jazykových verzí (
en-US
aru-RU
fr-FR
) následujícím způsobem:Pro podporu
en-US
jazykové verze (USA) vytvořte soubor prostředků s názvem Greeting.en-US.resx nebo Greeting.en-US.txt a uložte ho do jednoho řetězce s názvemHelloString
"Hi world!".Pokud chcete podporovat
fr-FR
jazykovou verzi francouzštiny (Francie), vytvořte soubor prostředků s názvem Greeting.fr-FR.resx nebo Greeting.fr-FR.txt a uložte ho do jednoho řetězce s názvemHelloString
"Salut tout le monde!".Pokud chcete podporovat
ru-RU
jazykovou verzi ruštiny (Rusko), vytvořte soubor prostředků s názvem Greeting.ru-RU.resx nebo Greeting.ru-RU.txt a uložte ho do jednoho řetězce s názvemHelloString
"Всем привет!".
Pomocí resgen.exe zkompilujte každý text nebo soubor prostředků XML do binárního souboru .resources . Výstup je sada souborů, které mají stejný název kořenového souboru jako soubory .resx nebo .txt , ale příponu .resources . Pokud vytvoříte příklad pomocí sady Visual Studio, proces kompilace se zpracuje automaticky. Pokud visual Studio nepoužíváte, spuštěním následujících příkazů zkompilujte soubory .resx do souborů .resources :
resgen Greeting.resx resgen Greeting.en-us.resx resgen Greeting.fr-FR.resx resgen Greeting.ru-RU.resx
Pokud jsou vaše prostředky v textových souborech místo souborů XML, nahraďte příponu .resx .txt.
Zkompilujte následující zdrojový kód spolu s prostředky pro výchozí jazykovou verzi do hlavního sestavení aplikace:
Důležité
Pokud k vytvoření příkladu používáte příkazový řádek místo sady Visual Studio, měli byste změnit volání konstruktoru ResourceManager třídy na následující:
ResourceManager rm = new ResourceManager("Greeting", typeof(Example).Assembly);
using System; using System.Globalization; using System.Reflection; using System.Resources; using System.Threading; using System.Windows.Forms; class Example { static void Main() { // Create array of supported cultures string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU"}; Random rnd = new Random(); int cultureNdx = rnd.Next(0, cultures.Length); CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; try { CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]); Thread.CurrentThread.CurrentCulture = newCulture; Thread.CurrentThread.CurrentUICulture = newCulture; ResourceManager rm = new ResourceManager("Example.Greeting", typeof(Example).Assembly); string greeting = String.Format("The current culture is {0}.\n{1}", Thread.CurrentThread.CurrentUICulture.Name, rm.GetString("HelloString")); MessageBox.Show(greeting); } catch (CultureNotFoundException e) { Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName); } finally { Thread.CurrentThread.CurrentCulture = originalCulture; Thread.CurrentThread.CurrentUICulture = originalCulture; } } }
Imports System.Globalization Imports System.Resources Imports System.Threading Module Module1 Sub Main() ' Create array of supported cultures Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU"} Dim rnd As New Random() Dim cultureNdx As Integer = rnd.Next(0, cultures.Length) Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture Try Dim newCulture As New CultureInfo(cultures(cultureNdx)) Thread.CurrentThread.CurrentCulture = newCulture Thread.CurrentThread.CurrentUICulture = newCulture Dim greeting As String = String.Format("The current culture is {0}.{1}{2}", Thread.CurrentThread.CurrentUICulture.Name, vbCrLf, My.Resources.Greetings.HelloString) MsgBox(greeting) Catch e As CultureNotFoundException Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName) Finally Thread.CurrentThread.CurrentCulture = originalCulture Thread.CurrentThread.CurrentUICulture = originalCulture End Try End Sub End Module
Pokud se aplikace jmenuje Příklad a kompilujete z příkazového řádku, je příkaz kompilátoru jazyka C#:
csc Example.cs -res:Greeting.resources
Odpovídající příkaz kompilátoru jazyka Visual Basic je:
vbc Example.vb -res:Greeting.resources
Vytvořte podadresář v hlavním adresáři aplikace pro každou lokalizovanou jazykovou verzi podporovanou aplikací. Měli byste vytvořit podadresář en-US, fr-FR a ru-RU . Visual Studio vytvoří tyto podadresáře automaticky jako součást procesu kompilace.
Vložte soubory .resources specifické pro jednotlivé jazykové verze do satelitních sestavení a uložte je do příslušného adresáře. Příkaz, který to provede pro každý soubor .resources , je:
al -target:lib -embed:Greeting.culture.resources -culture:culture -out:culture\Example.resources.dll
kde jazyková verze je název jazykové verze, jejíž prostředky satelitní sestavení obsahuje. Visual Studio tento proces zpracovává automaticky.
Pak můžete spustit příklad. Náhodně vytvoří jednu z podporovaných jazykových verzí aktuální jazykovou verzi a zobrazí lokalizovaný pozdrav.
Instalace satelitních sestavení do globální mezipaměti sestavení
Místo instalace sestavení v podadresáři místní aplikace je můžete nainstalovat do globální mezipaměti sestavení. To je zvlášť užitečné, pokud máte knihovny tříd a sestavení prostředků knihovny tříd, které používají více aplikací.
Instalace sestavení v globální mezipaměti sestavení vyžaduje, aby měly silné názvy. Sestavení se silným názvem jsou podepsána platnou dvojicí veřejného a privátního klíče. Obsahují informace o verzi, které modul runtime používá k určení sestavení, které se má použít k splnění požadavku vazby. Další informace o silných názvech asch Další informace o silných názvech naleznete v tématu Sestavení se silným názvem.
Když vyvíjíte aplikaci, je nepravděpodobné, že budete mít přístup k poslednímu páru veřejného a privátního klíče. Pokud chcete nainstalovat satelitní sestavení do globální mezipaměti sestavení a zajistit, že funguje podle očekávání, můžete použít techniku označovanou jako zpožděné podepisování. Když zpozdíte podepsání sestavení, v době sestavení si rezervujete místo v souboru pro podpis silného názvu. Skutečné podepisování se zpozdí až později, až bude k dispozici poslední pár veřejného a privátního klíče. Další informace o zpožděném podepisování naleznete v tématu Zpoždění podepisování sestavení.
Získání veřejného klíče
Pokud chcete podepsat sestavení, musíte mít přístup k veřejnému klíči. Můžete buď získat skutečný veřejný klíč od organizace ve vaší společnosti, která provede případné podepisování, nebo vytvořit veřejný klíč pomocí nástroje Silné jméno (sn.exe).
Následující příkaz Sn.exe vytvoří dvojici testovacího veřejného a privátního klíče. Možnost –k určuje, že Sn.exe by měl vytvořit novou dvojici klíčů a uložit ji do souboru s názvem TestKeyPair.snk.
sn –k TestKeyPair.snk
Veřejný klíč můžete extrahovat ze souboru, který obsahuje dvojici testovacího klíče. Následující příkaz extrahuje veřejný klíč z TestKeyPair.snk a uloží ho do PublicKey.snk:
sn –p TestKeyPair.snk PublicKey.snk
Zpoždění podepsání sestavení
Po získání nebo vytvoření veřejného klíče použijete Linker sestavení (al.exe) ke kompilaci sestavení a určení zpožděného podepisování.
Následující příkaz al.exe vytvoří ze souboru stringLibrary aplikace ze souboru strings.ja.resources sestavení se silným názvem:
al -target:lib -embed:strings.ja.resources -culture:ja -out:StringLibrary.resources.dll -delay+ -keyfile:PublicKey.snk
Možnost -delay+ určuje, že linker sestavení by měl zpozdit podepsání sestavení. Možnost -keyfile určuje název souboru klíče, který obsahuje veřejný klíč, který se má použít ke zpoždění podepsání sestavení.
Opětovné podepsání sestavení
Než nasadíte aplikaci, musíte znovu podepsat satelitní sestavení se zpožděním podepsaným satelitním sestavením pomocí páru skutečných klíčů. Můžete to provést pomocí Sn.exe.
Následující příkaz Sn.exe podepíše StringLibrary.resources.dll párem klíčů uloženým v souboru RealKeyPair.snk. Možnost –R určuje, že dříve podepsané nebo pozdržované sestavení se má znovu podepsat.
sn –R StringLibrary.resources.dll RealKeyPair.snk
Instalace satelitního sestavení do globální mezipaměti sestavení
Když modul runtime hledá prostředky v záložním procesu prostředku, nejprve se podívá do globální mezipaměti sestavení. (Další informace najdete v části "Záložní proces prostředku" v části Zabalte a nasaďte prostředky.) Jakmile je satelitní sestavení podepsáno silným názvem, lze jej nainstalovat do globální mezipaměti sestavení pomocí nástroje Globální mezipaměť sestavení (gacutil.exe).
Následující příkaz Gacutil.exe nainstaluje StringLibrary.resources.dll* do globální mezipaměti sestavení:
gacutil -i:StringLibrary.resources.dll
Možnost /i určuje, že Gacutil.exe by měl nainstalovat zadané sestavení do globální mezipaměti sestavení. Po instalaci satelitního sestavení v mezipaměti budou prostředky, které obsahuje, k dispozici pro všechny aplikace, které jsou navrženy tak, aby používaly satelitní sestavení.
Prostředky v globální mezipaměti sestavení: Příklad
Následující příklad používá metodu v knihovně tříd .NET k extrakci a vrácení lokalizovaného pozdravu ze souboru prostředků. Knihovna a její prostředky jsou registrovány v globální mezipaměti sestavení. Příklad obsahuje zdroje pro angličtinu (USA), francouzštinu (Francie), ruštinu (Rusko) a anglickou jazykovou verzi. Angličtina je výchozí jazyková verze; prostředky jsou uloženy v hlavním sestavení. Příklad zpočátku zpozdí knihovnu a její satelitní sestavení pomocí veřejného klíče a pak je znovu podepíše párem veřejného/privátního klíče. Pokud chcete vytvořit příklad, postupujte takto:
Pokud visual Studio nepoužíváte, vytvořte pomocí následujícího příkazu nástroje Strong Name Tool (Sn.exe) pár veřejného a privátního klíče s názvem ResKey.snk:
sn –k ResKey.snk
Pokud používáte Visual Studio, vygenerujte soubor klíče pomocí karty Podpis v dialogovém okně Vlastnosti projektu.
Pomocí následujícího příkazu Strong Name Tool (Sn.exe) vytvořte soubor veřejného klíče s názvem PublicKey.snk:
sn –p ResKey.snk PublicKey.snk
Vytvořte soubor prostředku s názvem Strings.resx , který bude obsahovat prostředek pro výchozí jazykovou verzi. V daném souboru uložte jeden řetězec,
Greeting
jehož hodnota je "How do you do?" (Jak to uděláte).Chcete-li označit, že "en" je výchozí jazyková verze aplikace, přidejte následující System.Resources.NeutralResourcesLanguageAttribute atribut do souboru AssemblyInfo aplikace nebo do hlavního souboru zdrojového kódu, který se zkompiluje do hlavního sestavení aplikace:
[assembly:NeutralResourcesLanguageAttribute("en")]
<Assembly: NeutralResourcesLanguageAttribute("en")>
Do aplikace přidejte podporu dalších jazykových verzí (jazykové verze en-US, fr-FR a ru-RU):
Pokud chcete podporovat jazykovou verzi "en-US" nebo english (USA), vytvořte soubor prostředků s názvem Strings.en-US.resx nebo Strings.en-US.txt a uložte ho do jednoho řetězce s názvem
Greeting
"Hello!".Pokud chcete podporovat jazykovou verzi fr-FR nebo francouzštinu (Francie), vytvořte soubor prostředků s názvem Strings.fr-FR.resx nebo Strings.fr-FR.txt a uložte ho do jednoho řetězce s názvem
Greeting
"Bon jour!".Pokud chcete podporovat jazykovou verzi ru-RU nebo ruštinu (Rusko), vytvořte soubor prostředků s názvem Strings.ru-RU.resx nebo Strings.ru-RU.txt a uložte ho do jednoho řetězce,
Greeting
jehož hodnota je Привет!.
Pomocí resgen.exe zkompilujte každý text nebo soubor prostředků XML do binárního souboru .resources. Výstup je sada souborů, které mají stejný název kořenového souboru jako soubory .resx nebo .txt , ale příponu .resources . Pokud vytvoříte příklad pomocí sady Visual Studio, proces kompilace se zpracuje automaticky. Pokud visual Studio nepoužíváte, spuštěním následujícího příkazu zkompilujte soubory .resx do souborů .resources :
resgen filename
Kde název souboru je volitelná cesta, název souboru a přípona souboru .resx nebo textového souboru.
Zkompilujte následující zdrojový kód pro StringLibrary.vb nebo StringLibrary.cs společně s prostředky pro výchozí jazykovou verzi do zpožděného podepsaného sestavení knihovny s názvem StringLibrary.dll:
Důležité
Pokud k vytvoření příkladu používáte příkazový řádek místo sady Visual Studio, měli byste změnit volání konstruktoru ResourceManager třídy na
ResourceManager rm = new ResourceManager("Strings",
typeof(Example).Assembly);
.using System; using System.Globalization; using System.Reflection; using System.Resources; using System.Threading; [assembly:NeutralResourcesLanguageAttribute("en")] public class StringLibrary { public string GetGreeting() { ResourceManager rm = new ResourceManager("Strings", Assembly.GetAssembly(typeof(StringLibrary))); string greeting = rm.GetString("Greeting"); return greeting; } }
Imports System.Globalization Imports System.Reflection Imports System.Resources Imports System.Threading <Assembly: NeutralResourcesLanguageAttribute("en")> Public Class StringLibrary Public Function GetGreeting() As String Dim rm As New ResourceManager("Strings", _ Assembly.GetAssembly(GetType(StringLibrary))) Dim greeting As String = rm.GetString("Greeting") Return greeting End Function End Class
Příkaz pro kompilátor jazyka C# je:
csc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.cs
Odpovídající příkaz kompilátoru jazyka Visual Basic je:
vbc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.vb
Vytvořte podadresář v hlavním adresáři aplikace pro každou lokalizovanou jazykovou verzi podporovanou aplikací. Měli byste vytvořit podadresář en-US, fr-FR a ru-RU . Visual Studio vytvoří tyto podadresáře automaticky jako součást procesu kompilace. Vzhledem k tomu, že všechna satelitní sestavení mají stejný název souboru, používají se podadresáře k ukládání jednotlivých satelitních sestavení specifických pro jazykovou verzi, dokud nebudou podepsány pomocí dvojice veřejného a privátního klíče.
Vložte jednotlivé soubory .resources specifické pro jazykovou verzi do zpožděných podepsaných satelitních sestavení a uložte je do příslušného adresáře. Příkaz, který to provede pro každý soubor .resources , je:
al -target:lib -embed:Strings.culture.resources -culture:culture -out:culture\StringLibrary.resources.dll -delay+ -keyfile:publickey.snk
kde jazyková verze je název jazykové verze. V tomto příkladu jsou názvy jazykových verzí en-US, fr-FR a ru-RU.
Opětovné podepsání StringLibrary.dll pomocí nástroje Silné jméno (sn.exe) následujícím způsobem:
sn –R StringLibrary.dll RealKeyPair.snk
Znovu podepište jednotlivá satelitní sestavení. K tomu použijte nástroj Strong Name (sn.exe) pro každé satelitní sestavení:
sn –R StringLibrary.resources.dll RealKeyPair.snk
Pomocí následujícího příkazu zaregistrujte StringLibrary.dll a každou ze svých satelitních sestavení v globální mezipaměti sestavení:
gacutil -i filename
kde název souboru je název souboru, který se má zaregistrovat.
Pokud používáte Visual Studio, vytvořte nový projekt konzolové aplikace s názvem
Example
, přidejte do něj odkaz na StringLibrary.dll a následující zdrojový kód a zkompilujte ho.using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" }; Random rnd = new Random(); string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)]; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName); Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name); StringLibrary strLib = new StringLibrary(); string greeting = strLib.GetGreeting(); Console.WriteLine(greeting); } }
Imports System.Globalization Imports System.Threading Module Example Public Sub Main() Dim cultureNames() As String = {"en-GB", "en-US", "fr-FR", "ru-RU"} Dim rnd As New Random() Dim cultureName As String = cultureNames(rnd.Next(0, cultureNames.Length)) Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName) Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name) Dim strLib As New StringLibrary() Dim greeting As String = strLib.GetGreeting() Console.WriteLine(greeting) End Sub End Module
Pokud chcete zkompilovat z příkazového řádku, použijte pro kompilátor jazyka C#následující příkaz:
csc Example.cs -r:StringLibrary.dll
Příkazový řádek kompilátoru jazyka Visual Basic je:
vbc Example.vb -r:StringLibrary.dll
Spusťte Example.exe.