Resgen.exe (generátor souborů prostředků)

Generátor souborů prostředků (Resgen.exe) převádí textové soubory (.txt nebo .restext) a soubory ve formátu prostředků založeném na JAZYCE XML (.resx) na soubory binárního souboru modulu CLR (.resources), které lze vložit do binárního spustitelného souboru modulu runtime nebo satelitního sestavení. Další informace najdete v tématu Vytvoření souborů prostředků.

Resgen.exe je nástroj pro převod prostředků pro obecné účely, který provádí následující úlohy:

  • Převede soubory .txt nebo .restext na soubory .resources nebo .resx. (Formát souborů .restext je stejný jako formát .txt souborů. Rozšíření .restext však pomáhá snadněji identifikovat textové soubory, které obsahují definice prostředků.)

  • Převede soubory .resources na textové soubory nebo soubory .resx.

  • Převede soubory .resx na textové nebo .resources soubory.

  • Extrahuje řetězcové prostředky ze sestavení do souboru .resw, který je vhodný pro použití v aplikaci pro Windows 8.x Store.

  • Vytvoří třídu silného typu, která poskytuje přístup k jednotlivým pojmenovaným prostředkům a instanci ResourceManager .

Pokud Resgen.exe z nějakého důvodu selže, návratová hodnota je -1.

Pokud chcete získat nápovědu k Resgen.exe, můžete použít následující příkaz bez zadaných možností k zobrazení syntaxe příkazu a možností pro Resgen.exe:

resgen

Přepínač můžete použít /? také:

resgen /?

Pokud používáte Resgen.exe ke generování binárních souborů .resources, můžete použít kompilátor jazyka k vložení binárních souborů do spustitelných sestavení, nebo můžete pomocí linkeru sestavení (Al.exe) je zkompilovat do satelitních sestavení.

Tento nástroj se automaticky nainstaluje se sadou Visual Studio. Ke spuštění nástroje použijte Visual Studio Developer Command Prompt nebo Visual Studio Developer PowerShell.

Na příkazovém řádku zadejte následující příkaz:

Syntaxe

resgen  [-define:symbol1[,symbol2,...]] [/useSourcePath] filename.extension  | /compile filename.extension... [outputFilename.extension] [/r:assembly] [/str:lang[,namespace[,class[,file]]] [/publicclass]]
resgen filename.extension [outputDirectory]

Parametry

Parametr nebo přepínač Description
/define: symbol1[, symbol2,...] Počínaje rozhraním .NET Framework 4.5 podporuje podmíněné kompilace v textových (.txt nebo .restext) souborech prostředků. Pokud symbol odpovídá symbolu obsaženému ve vstupním textovém souboru v rámci konstruktoru #ifdef , je přidružený prostředek řetězce zahrnutý do souboru .resources. Pokud vstupní textový soubor obsahuje #if ! příkaz se symbolem, který není definován /define přepínačem, je přidružený prostředek řetězce zahrnut do souboru prostředků.

/define se ignoruje, pokud se používá s netextovými soubory. Symboly rozlišují malá a velká písmena.

Další informace o této možnosti naleznete v tématu Podmíněné kompilace prostředků dále v tomto tématu.
useSourcePath Určuje, že se má použít aktuální adresář vstupního souboru k překladu relativních cest k souborům.
/compile Umožňuje zadat více souborů .resx nebo text k převodu na více souborů .resources v rámci jedné hromadné operace. Pokud tuto možnost nezadáte, můžete zadat pouze jeden argument vstupního souboru. Výstupní soubory mají název filename.resources.

Tuto možnost nelze použít s /str: touto možností.

Další informace o této možnosti naleznete v tématu Kompilace nebo převod více souborů dále v tomto tématu.
/r: assembly Odkazuje na metadata ze zadaného sestavení. Používá se při převodu souborů .resx a umožňuje Resgen.exe serializovat nebo deserializovat prostředky objektu. Podobá se možnostem kompilátorů /r: jazyka /reference: C# a Visual Basic.
filename.extension Určuje název vstupního souboru, který se má převést. Pokud používáte první, delší syntaxi příkazového řádku před touto tabulkou, extension musí být jedna z těchto věcí:

.txt nebo .restext
Textový soubor, který se má převést na soubor .resources nebo .resx. Textové soubory můžou obsahovat pouze řetězcové prostředky. Informace o formátu souboru najdete v části Zdroje v textových souborech v části Vytvoření souborů prostředků.

.resx
Soubor prostředků založený na jazyce XML, který se má převést na soubor .resources nebo text (.txt nebo .restext).

.prostředky
Binární soubor prostředků, který se má převést na soubor .resx nebo text (.txt nebo .restext).

Pokud používáte druhou, kratší syntaxi příkazového řádku před touto tabulkou, extension musí být následující:

.exe nebo .dll
Sestavení rozhraní .NET Framework (spustitelný soubor nebo knihovna), jehož řetězcové prostředky se mají extrahovat do souboru .resw pro použití při vývoji aplikací pro Windows 8.x Store.
outputFilename.extension Určuje název a typ souboru prostředků, který se má vytvořit.

Tento argument je volitelný při převodu ze souboru .txt, .restext nebo .resx na soubor .resources. Pokud nezadáte outputFilename, Resgen.exe připojí k vstupu filename příponu .resources a zapíše soubor do adresáře, který obsahuje filename,extension.

Argument outputFilename.extension je povinný při převodu ze souboru .resources. Při převodu souboru .resources na soubor prostředků založený na JAZYCE XML zadejte název souboru s příponou .resx. Zadejte název souboru s příponou .txt nebo .restext při převodu souboru .resources na textový soubor. Soubor .resources byste měli převést na soubor .txt pouze v případě, že soubor .resources obsahuje pouze řetězcové hodnoty.
outputDirectory U aplikací pro Windows 8.x Store určuje adresář, do kterého se zapíše soubor .resw obsahující řetězcové prostředky filename.extension . outputDirectory musí již existovat.
/str: language[,namespace[,classname[,filename]]] Vytvoří soubor třídy prostředků silného typu v programovacím jazyce zadaném language v možnosti. language může se skládat z jednoho z následujících literálů:

- Pro C#: c#, csnebo csharp.
- Pro Visual Basic: vb nebo visualbasic.
- Pro VBScript: vbs nebo vbscript.
- Pro C++: c++, mcnebo cpp.
- Pro JavaScript: js, jscriptnebo javascript.

Možnost namespace určuje výchozí obor názvů projektu, classname možnost určuje název vygenerované třídy a filename možnost určuje název souboru třídy.

Tato /str: možnost umožňuje pouze jeden vstupní soubor, takže ji nelze použít s /compile možností.

Pokud namespace je zadán, ale classname není, název třídy je odvozen z názvu výstupního souboru (například podtržítka jsou nahrazena tečkami). Prostředky silného typu nemusí správně fungovat jako výsledek. Chcete-li tomu zabránit, zadejte název třídy i název výstupního souboru.

Další informace o této možnosti naleznete v tématu Generování třídy prostředků silného typu dále v tomto tématu.
/publicClass Vytvoří třídu prostředků silného typu jako veřejnou třídu. Ve výchozím nastavení je internal třída prostředků v jazyce C# a Friend v jazyce Visual Basic.

Tato možnost se ignoruje, pokud /str: se tato možnost nepoužívá.

typy souborů Resgen.exe a prostředků

Aby bylo možné Resgen.exe úspěšně převést prostředky, musí textové soubory a soubory .resx dodržovat správný formát.

Text ( soubory.txt a .restext)

Textové soubory (.txt nebo .restext) mohou obsahovat pouze řetězcové prostředky. Řetězcové prostředky jsou užitečné, pokud píšete aplikaci, která musí obsahovat řetězce přeložené do několika jazyků. Pomocí příslušného řetězcového prostředku můžete například snadno lokalizovat řetězce nabídek. Resgen.exe čte textové soubory, které obsahují páry název/hodnota, kde je název řetězec, který popisuje prostředek a hodnota je samotný řetězec prostředku.

Poznámka:

Informace o formátu souborů .txt a .restext najdete v části Zdroje v textových souborech v části Vytvoření souborů prostředků.

Textový soubor, který obsahuje prostředky, musí být uložen s kódováním UTF-8 nebo Unicode (UTF-16), pokud neobsahuje pouze znaky v oblasti Základní latinka (do U+007F). Resgen.exe odebere rozšířené znaky ANSI při zpracování textového souboru uloženého pomocí kódování ANSI.

Resgen.exe zkontroluje duplicitní názvy prostředků v textovém souboru. Pokud textový soubor obsahuje duplicitní názvy prostředků, Resgen.exe vygeneruje upozornění a ignoruje druhou hodnotu.

Soubory .resx

Formát souboru prostředků .resx se skládá z položek XML. V těchto položkách XML můžete zadat prostředky řetězců, stejně jako v textových souborech. Hlavní výhodou souborů .resx oproti textovým souborům je, že můžete také zadat nebo vložit objekty. Když zobrazíte soubor .resx, můžete vidět binární formu vloženého objektu (například obrázek), když je tato binární informace součástí manifestu prostředku. Stejně jako u textových souborů můžete otevřít soubor .resx pomocí textového editoru (například Poznámkového bloku nebo Microsoft Wordu) a zapsat, analyzovat a manipulovat s jeho obsahem. Mějte na paměti, že to vyžaduje dobré znalosti značek XML a struktury souborů .resx. Další podrobnosti o formátu souboru .resx najdete v části Prostředky v souborech .resx v části Vytvoření souborů prostředků.

Chcete-li vytvořit soubor .resources, který obsahuje vložené neřetězecí objekty, musíte buď použít Resgen.exe k převodu souboru .resx obsahující objekty nebo přidat prostředky objektu do souboru přímo z kódu voláním metod poskytovaných ResourceWriter třídou.

Pokud váš soubor .resx nebo .resources obsahuje objekty a použijete Resgen.exe k jeho převodu na textový soubor, všechny řetězcové prostředky budou převedeny správně, ale datové typy neřetězných objektů budou také zapsány do souboru jako řetězce. Při převodu ztratíte vložené objekty a Resgen.exe oznámí, že při načítání prostředků došlo k chybě.

Převod mezi typy souborů prostředků

Při převodu mezi různými typy souborů prostředků Resgen.exe nemusí být schopen provést převod nebo může ztratit informace o konkrétních prostředcích v závislosti na typu zdrojového a cílového souboru. Následující tabulka určuje typy převodů, které jsou úspěšné při převodu z jednoho typu souboru prostředku na jiný.

Převést z Do textového souboru Do souboru .resx Do souboru .resw Do souboru .resources
Text ( soubor.txt nebo .restext) -- Žádné problémy Není podporováno Žádné problémy
Soubor .resx Převod selže, pokud soubor obsahuje jiné než řetězcové prostředky (včetně odkazů na soubory). -- Nepodporováno* Žádné problémy
Soubor .resources Převod selže, pokud soubor obsahuje jiné než řetězcové prostředky (včetně odkazů na soubory). Žádné problémy Není podporováno --
sestavení .exe nebo .dll Není podporováno Není podporováno Jako prostředky se rozpoznají pouze řetězcové prostředky (včetně názvů cest). Není podporováno

*V aplikacích pro Windows 8.x Store použijete soubory .resw k vytváření prostředků. Navzdory rozdílu přípony souboru je formát souboru .resw stejný jako formát souboru .resx s tím rozdílem, že soubory .resw mohou obsahovat pouze řetězce a cesty k souborům. Soubory .resx, které obsahují pouze řetězce a cesty k souborům .resw můžete převést jednoduše změnou přípony souboru.

Provádění konkrétních úloh Resgen.exe

Můžete použít Resgen.exe různými způsoby: ke kompilaci textového souboru nebo souboru prostředků založeného na jazyce XML do binárního souboru, k převodu mezi formáty souborů prostředků a k vygenerování třídy, která zabalí ResourceManager funkce a poskytuje přístup k prostředkům. Tato část obsahuje podrobné informace o jednotlivých úkolech:

Kompilace prostředků do binárního souboru

Nejběžnějším použitím Resgen.exe je kompilovat textový soubor prostředků (soubor .txt nebo .restext) nebo soubor prostředků založený na jazyce XML (soubor .resx) do binárního souboru .resources. Výstupní soubor pak lze vložit do hlavního sestavení kompilátorem jazyka nebo do satelitního sestavení pomocí Assembly Linker (AL.exe).

Syntaxe pro kompilaci souboru prostředků je:

resgen inputFilename [outputFilename]

kde jsou parametry:

inputFilename Název souboru, včetně přípony, souboru prostředku, který se má zkompilovat. Resgen.exe kompiluje soubory pouze s příponami .txt, .restext nebo .resx.

outputFilename Název výstupního souboru. Pokud vynecháte outputFilename, Resgen.exe vytvoří soubor .resources s názvem kořenového inputFilename souboru ve stejném adresáři jako inputFilename. Pokud outputFilename obsahuje cestu k adresáři, musí adresář existovat.

Plně kvalifikovaný obor názvů pro soubor .resources zadáte v názvu souboru a oddělíte ho od názvu kořenového souboru tečkou. Pokud outputFilename je MyCompany.Libraries.Strings.resourcesnapříklad , obor názvů je MyCompany.Libraries.

Následující příkaz přečte páry name/value v Resources.txt a zapíše binární soubor .resources s názvem Resources.resources. Vzhledem k tomu, že název výstupního souboru není explicitně zadán, obdrží ve výchozím nastavení stejný název jako vstupní soubor.

resgen Resources.txt

Následující příkaz přečte páry name/value v Resources.restext a zapíše binární soubor prostředků s názvem StringResources.resources.

resgen Resources.restext StringResources.resources

Následující příkaz přečte vstupní soubor založený na jazyce XML s názvem Resources.resx a zapíše binární soubor .resources s názvem Resources.resources.

resgen Resources.resx Resources.resources

Převod mezi typy souborů prostředků

Kromě kompilace textových nebo XML souborů prostředků do binárních souborů .resources může Resgen.exe převést jakýkoli podporovaný typ souboru na jakýkoli jiný podporovaný typ souboru. To znamená, že může provádět následující převody:

  • soubory .txt a .restext do souborů .resx.

  • Soubory .resx pro soubory .txt a .restext.

  • Soubory .resources pro soubory .txt a .restext.

  • Soubory .resources do souborů .resx.

Syntaxe je stejná jako v předchozí části.

Kromě toho můžete pomocí Resgen.exe převést vložené prostředky v sestavení .NET Framework na soubor .resw pro aplikace pro Windows 8.x Store.

Následující příkaz přečte binární soubor resources Resources.resources a zapíše výstupní soubor založený na jazyce XML s názvem Resources.resx.

resgen Resources.resources Resources.resx

Následující příkaz přečte textový soubor prostředků s názvem StringResources.txt a zapíše soubor prostředků založený na jazyce XML s názvem LibraryResources.resx. Kromě obsahujících řetězcových prostředků lze soubor .resx použít také k ukládání neřetězcových prostředků.

resgen StringResources.txt LibraryResources.resx

Následující dva příkazy čtou soubor prostředků založený na jazyce XML s názvem Resources.resx a zapisují textové soubory s názvem Resources.txt a Resources.restext. Všimněte si, že pokud soubor .resx obsahuje vložené objekty, nebudou přesně převedeny na textové soubory.

resgen Resources.resx Resources.txt
resgen Resources.resx Resources.restext

Kompilace nebo převod více souborů

Pomocí přepínače můžete /compile převést seznam souborů prostředků z jednoho formátu do jiného v rámci jedné operace. Syntaxe je:

resgen /compile filename.extension [filename.extension...]

Následující příkaz zkompiluje tři soubory, StringResources.txt, TableResources.resw a ImageResources.resw, do samostatných souborů .resources s názvem StringResources.resources, TableResources.resources a ImageResources.resources.

resgen /compile StringResources.txt TableResources.resx ImageResources.resx

Export prostředků do souboru .resw

Pokud vyvíjíte aplikaci pro Windows 8.x Store, můžete chtít použít prostředky z existující desktopové aplikace. Tyto dva druhy aplikací však podporují různé formáty souborů. V desktopových aplikacích se prostředky v textu (.txt nebo .restext) nebo .resx kompilují do binárních souborů .resources. V aplikacích pro Windows 8.x Store se soubory .resw kompilují do souborů indexu prostředků binárního balíčku (PRI). Tuto mezeru můžete překlenout pomocí Resgen.exe extrahováním prostředků ze spustitelného souboru nebo satelitního sestavení a jejich zápisem do jednoho nebo více souborů .resw, které lze použít při vývoji aplikace pro Windows 8.x Store.

Důležité

Visual Studio automaticky zpracovává všechny převody potřebné k začlenění prostředků do přenosné knihovny do aplikace pro Windows 8.x Store. Použití Resgen.exe přímo k převodu prostředků v sestavení do formátu souboru .resw je zajímavé pouze pro vývojáře, kteří chtějí vyvíjet aplikaci pro Windows 8.x Store mimo Visual Studio.

Syntaxe pro generování souborů .resw ze sestavení je:

resgen filename.extension  [outputDirectory]

kde jsou parametry:

filename.extension Název sestavení rozhraní .NET Framework (spustitelný soubor nebo .DLL). Pokud soubor neobsahuje žádné prostředky, Resgen.exe žádné soubory nevytvoří.

outputDirectory Existující adresář, do kterého chcete zapisovat soubory .resw. Pokud outputDirectory je vynechán, soubory .resw se zapisují do aktuálního adresáře. Resgen.exe vytvoří jeden soubor .resw pro každý soubor .resources v sestavení. Kořenový název souboru .resw je stejný jako kořenový název souboru .resources.

Následující příkaz vytvoří soubor .resw v adresáři Win8Resources pro každý soubor .resources vložený v MyApp.exe:

resgen MyApp.exe Win8Resources

Podmíněné kompilace prostředků

Počínaje rozhraním .NET Framework 4.5 Resgen.exe podporuje podmíněnou kompilaci řetězcových prostředků v textových souborech (.txt a .restext). To vám umožní použít jeden textový soubor prostředků v několika konfiguracích sestavení.

V souboru .txt nebo .restext použijete #ifdef... #endif konstruktor, který zahrne prostředek do binárního souboru .resources, pokud je definován symbol, a použijete #if !konstruktor ... #endif k zahrnutí prostředku, pokud symbol není definován. V době kompilace pak definujete symboly pomocí /define: možnosti následované čárkami odděleným seznamem symbolů. V porovnání se rozlišují malá a velká písmena. Velikost písmen symbolů definovaných /define v textových souborech se musí shodovat s písmeny v textových souborech, které se mají zkompilovat.

Například následující soubor s názvem UIResources.text obsahuje řetězcový prostředek s názvem AppTitle , který může mít jednu ze tří hodnot v závislosti na tom, zda jsou symboly s názvem PRODUCTION, CONSULTnebo RETAIL jsou definovány.

#ifdef PRODUCTION
AppTitle=My Software Company Project Manager
#endif
#ifdef CONSULT
AppTitle=My Consulting Company Project Manager
#endif
#ifdef RETAIL
AppTitle=My Retail Store Project Manager
#endif
FileMenuName=File

Soubor pak lze zkompilovat do binárního souboru .resources pomocí následujícího příkazu:

resgen /define:CONSULT UIResources.restext

Tím se vytvoří soubor .resources, který obsahuje dva řetězcové prostředky. Hodnota AppTitle zdroje je "My Consulting Company Project Manager".

Generování třídy prostředků se silnými typy

Resgen.exe podporuje prostředky silného typu, které zapouzdřuje přístup k prostředkům vytvořením tříd, které obsahují sadu statických vlastností jen pro čtení. To poskytuje alternativu k volání metod ResourceManager třídy přímo k načtení prostředků. Podporu prostředků silného StronglyTypedResourceBuilder typu můžete povolit pomocí /str možnosti v Resgen.exe, která zabalí funkce třídy. Když zadáte /str možnost, výstup Resgen.exe je třída, která obsahuje vlastnosti silného typu, které odpovídají prostředkům odkazovaným ve vstupním parametru. Tato třída poskytuje přístup jen pro čtení silného typu k prostředkům, které jsou k dispozici v zpracovávaných souborech.

Syntaxe pro vytvoření prostředku silného typu je:

resgen inputFilename [outputFilename] /str:language[,namespace,[classname[,filename]]] [/publicClass]

Parametry a přepínače jsou:

inputFilename Název souboru, včetně přípony, souboru prostředku, pro který se má vygenerovat třída prostředků silného typu. Soubor může být textový soubor, založený na JAZYCE XML nebo binární soubor .resources; může mít rozšíření .txt, .restext, .resw nebo .resources.

outputFilename Název výstupního souboru. Pokud outputFilename obsahuje cestu k adresáři, musí adresář existovat. Pokud vynecháte outputFilename, Resgen.exe vytvoří soubor .resources s názvem kořenového inputFilename souboru ve stejném adresáři jako inputFilename.

outputFilename může být textový soubor, založený na JAZYCE XML nebo binární .resources. Pokud se přípona outputFilename souboru liší od přípony inputFilenamesouboru , Resgen.exe provede převod souboru.

Pokud inputFilename je soubor .resources, Resgen.exe zkopíruje soubor .resources, pokud outputFilename je také soubor .resources. Pokud outputFilename tento parametr vynecháte, Resgen.exe přepsat inputFilename identickým souborem .resources.

Jazyk Jazyk, ve kterém se má generovat zdrojový kód pro třídu prostředků silného typu. Možné hodnoty jsou cs, C#a csharp pro kód vb jazyka C# a visualbasic pro kód vbs jazyka Visual Basic a vbscript pro kód jazyka VBScript a c++mc, a cpp pro kód jazyka C++.

Namespace Obor názvů, který obsahuje třídu prostředků silného typu. Soubor .resources a třída prostředků by měly mít stejný obor názvů. Informace o určení oboru názvů v části outputFilenameCompiling Resources into a Binary File. Pokud je obor názvů vynechán, třída prostředků není obsažena v oboru názvů.

classname Název třídy prostředků silného typu. To by mělo odpovídat kořenovému názvu souboru .resources. Pokud například Resgen.exe vygeneruje soubor .resources s názvem MyCompany.Libraries.Strings.resources, název třídy prostředků silného typu je Strings. Pokud název třídy vynecháte, vygenerovaná třída je odvozena od kořenového názvu .outputFilename Pokud outputFilename je vynechán, vygenerovaná třída je odvozena od kořenového názvu .inputFilename

classname nemůže obsahovat neplatné znaky, jako jsou vložené mezery. Pokud název třídy obsahuje vložené mezery nebo pokud je název třídy ve výchozím nastavení generován z inputFilename a inputFilename obsahuje vložené mezery, Resgen.exe nahradí všechny neplatné znaky podtržítkem (_).

jméno souboru Název souboru třídy.

/publicclass Zpřístupňuje třídu prostředků silného typu místo internal (v jazyce C#) nebo Friend (v jazyce Visual Basic). To umožňuje přístup k prostředkům mimo sestavení, ve kterém jsou vloženy.

Důležité

Při vytváření třídy prostředků silného typu musí název souboru .resources odpovídat oboru názvů a názvu třídy vygenerovaného kódu. Ale Resgen.exe umožňuje zadat možnosti, které vytvoří soubor .resources, který má nekompatibilní název. Chcete-li toto chování obejít, přejmenujte výstupní soubor po vygenerování.

Třída prostředků silného typu má následující členy:

  • Konstruktor bez parametrů, který lze použít k vytvoření instance třídy prostředků silného typu.

  • A static (C#) nebo Shared (Visual Basic) a vlastnost jen pro ResourceManager čtení, která vrací ResourceManager instanci, která spravuje prostředek silného typu.

  • Statická Culture vlastnost, která umožňuje nastavit jazykovou verzi použitou pro načítání prostředků. Ve výchozím nastavení je nulljeho hodnota , což znamená, že se používá aktuální jazyková verze uživatelského rozhraní.

  • Jedna static (C#) nebo Shared (Visual Basic) a vlastnost jen pro čtení pro každý prostředek v souboru .resources. Název vlastnosti je název prostředku.-

Následující příkaz například zkompiluje soubor prostředků s názvem StringResources.txt do StringResources.resources a vygeneruje třídu pojmenovanou StringResources v souboru zdrojového kódu jazyka Visual Basic s názvem StringResources.vb, který lze použít pro přístup k Resource Manageru.

resgen StringResources.txt /str:vb,,StringResources

Viz také