資源檔產生器 (Resgen.exe)

更新:2007 年 11 月

資源檔產生器可以將文字 (.txt 或 .restext) 檔及 XML 架構資源格式 (.resx) 檔,轉換成 Common Language Runtime 二進位 (.resources) 檔,這種檔案可以嵌入至執行階段二進位可執行檔或編譯成附屬組件。如需部署和擷取 .resources 檔的詳細資訊,請參閱應用程式中的資源

Resgen.exe 執行下列轉換動作:

  • 將 .txt 或 .restext 檔轉換成 .resources 或 .resx 檔。

    注意事項:

    副檔名 .restext 已引入 .NET Framework 2.0 版中。.restext 檔的格式與 .txt 檔案完全相同。但是,.restext 副檔名可以幫助您更容易識別內含資源定義的文字檔。

  • 將 .resources 檔轉換成文字或 .resx 檔。

  • 將 .resx 檔轉換成文字或 .resources 檔。

resgen [parameters] [/compile]filename.extension [outputFilename.extension] [/str:lang[,namespace[,class[,file]]]]

參數

引數

描述

filename.extension

要轉換的輸出檔名稱。extension 必須是下列其中之一:

.txt 或 .restext

指定文字檔的副檔名以轉換成 .resources 或 .resx 檔。文字檔只能包含字串資源。

.resx

指定 XML 架構資源檔的副檔名以轉換成 .resources 或文字 (.txt 或 .restext) 檔。

.resources

指定資源檔的副檔名要轉換成 .resx 或文字檔 (.txt 或 .restext)。

outputFilename.extension

要建立的資源檔名稱。

從 .txt、.restext 或 .resx 檔案轉換時,這是選擇性的引數。將文字或 .resx 檔轉換成 .resources 檔時,您可以指定 .resources 副檔名。如果沒有指定 outputFilename,Resgen.exe 會將 .resources 副檔名附加至輸出 filename引數,並且將檔案寫入包含 filename 的目錄中。

從 .resources 檔轉換時,outputFilename 是強制的引數。在將 .resources 檔轉換成 XML 架構資源檔時指定 .resx 副檔名。將 .resources 檔案轉換成文字檔時,指定 .txt 或 .restext 副檔名。當 .resources 檔只包含字串值時,您應只將 .resources 檔轉換成 .txt 檔。

選項

說明

/compile

可讓您指定在單一大量作業中,將多個 .resx 或文字檔,轉換成多個 .resources 檔案。如果您不指定這個選項,您只能指定一個輸入檔引數。

這個選項無法與 /str: 選項搭配使用。

/publicClass

建立強型別 (Strongly Typed) 資源類別做為公用類別。

如果沒有使用 /str: 選項,則會忽略這個選項。

/r:assembly

指定要從 assembly 載入的型別。如果您指定這個選項,則具有舊版型別的 .resx 檔案將會在 assembly 中使用此型別。

/str:language[,namespace[,classname[,filename]]]

以 language 選項中所指定的程式設計語言 (cs 或 C# 代表 C#,vb 或 visualbasic 代表 Visual Basic),建立強型別資源類別檔。您可以使用 namespace 選項指定專案的預設命名空間 (Namespace),使用 classname 選項指定所產生類別的名稱,並使用 filename 選項指定類別檔的名稱。

注意事項:

如果未指定 namespace,則 .NET Framework 2.0 版中會忽略,classname 和 filename。

使用 /str: 選項時只能指定一個輸入檔,因此這個選項無法與 /compile 選項搭配使用。

如果有指定 namespace 但未指定 classname,此時類別名稱便會衍生自該輸出檔名稱 (例如,以底線替代句號)。這樣一來,強型別資源可能無法正確運作。若要避免這項問題,請同時指定類別名稱和輸出檔名稱。

/usesourcepath

指定輸入檔的目前目錄是用來解析相對檔案路徑。

備註

Resgen.exe 藉由包裝以下四種類別所實作的方法來轉換檔案:

請注意 .NET Framework 應用程式無法直接使用由 ResXResourceWriter 類別建立的 .resx 檔。在將這個檔案加入您的應用程式之前,透過 Resgen.exe 執行它,以便將它轉換成 .resources 檔。如需在您程式碼中實作這些類別的詳細資訊,請參閱它們個別的參考主題。

如果要讓 Resgen.exe 能夠剖析您的輸入,您的文字和 .resx 檔必須遵守正確格式是關鍵要素。

文字 (.txt 或 .restext) 檔只能包含字串資源。如果您所撰寫的應用程式必須將字串轉譯成多種語言,字串資源是非常有用的。例如,使用適當的字串資源,您可以輕易地按地區安排功能表字串。Resgen.exe 讀取含有名稱/值組的文字檔,其中名稱是描述資源的字串,而值是資源字串本身。您必須在個別行上指定每個名稱/值組,如下所示:

name=value

請注意,文字檔中允許使用空字串。例如:

EmptyString=

文字檔必須以 UTF-8 或 Unicode 編碼的方式儲存,除非檔案只包含純羅馬字母,不包含如嘶音符 (Cedilla)、變母音 (Umlaut) 和波狀符號 (Tilde) 的變音符號。例如,Resgen.exe 會在處理沒有 UTF-8 或 Unicode 編碼方式的文字檔時,移除延伸的 ANSI 字元。

Resgen.exe 會針對重複的資源名稱檢查文字檔。如果文字檔包含重複的資源名稱,則 Resgen.exe 將會發出警告,並忽略重複的名稱。如需文字檔格式的詳細資訊,請參閱文字檔格式的資源

.resx 資源檔格式由 XML 項目組成。您可以在這些 XML 項目中指定字串資源,就像在文字檔中的方式一樣。.resx 檔優於文字檔的原因,就是您也可以指定或嵌入物件。在檢視 .resx 檔的時候,您可以實際看到內嵌物件 (如圖片) 的二進位格式 (當這個二進位資訊是資源資訊清單的一部分時)。就和文字檔一樣,您可以使用文字編輯器開啟 .resx 檔案 (例如 [記事本] 或 Microsoft Word) 並寫入、剖析和操作內容。請注意您必須對 XML 標記和 .resx 檔案結構有不錯的認識,才能這麼做。如需 .resx 檔格式的詳細資訊,請參閱 .Resx 檔格式的資源

若要建立含有內嵌非字串物件的 .resources 檔,您必須使用 Resgen.exe 來轉換含有物件的 .resx 檔,或使用 ResourceWriter 類別提供的方法,直接從程式碼中將物件資源加入您的檔案。如果使用 Resgen.exe 將含有物件的 .resources 檔轉換成文字檔,則所有字串資源都會正確的轉換,但是非字串物件的資料型別也會以字串寫入至檔案中。在進行轉換時您將會遺漏內嵌物件,而 Resgen.exe 將會報告擷取資源時所發生的錯誤。

.NET Framework 2.0 版支援強型別資源。強型別資源以建立包含一組靜態的唯讀 (get) 屬性的方式,例如提供替代方式來消耗資源,而不是直接使用 ResourceManager 類別的方法,以支援封裝對資源的存取。基本功能是由 Resgen.exe 中的 /str 命令列選項所提供,此選項會包裝 StronglyTypedResourceBuilder 類別的功能。當您指定 /str 選項時,Resgen.exe 的輸出是一個包含強型別屬性的類別 (這類屬性與輸入參數中所參考的資源相符)。此類別會針對所處理檔案中可用的資源提供強型別的唯讀存取。

資源檔產生器 (Resgen.exe) 工具可讓您建立 .resources 檔案以及強型別包裝函式,以存取這些 .resources 檔案。當您建立強型別包裝函式時,.resources 檔案的名稱必須符合所產生程式碼的命名空間 (Namespace) 和類別名稱 (例如,MyNamespace.MyClass.resources)。不過,資源檔產生器 (Resgen.exe) 工具可讓您指定以不相容的名稱產生 .resources 檔案的選項。若要解決這個行為,請在 資源檔產生器 (Resgen.exe) 工具產生不相容具名的輸出檔之後,重新命名這些檔案。

當您以 Resgen.exe 建立好 .resources 檔之後,請使用組件連結器 (Al.exe) 將資源嵌入執行階段二進位可執行檔,或是將它們編譯成附屬組件。

注意事項:

如果 Resgen.exe 因任何理由而失敗,則傳回值將會是 –1。

注意事項:

Resgen.exe 在產生強型別資源類別時,不接受包含空格的 .resx 檔名。它會將所有無效的字元取代為底線 ("_")。如需詳細資訊,請參閱 VerifyResourceName

範例

下列沒有指定任何選項的命令會顯示 Resgen.exe 的命令語法和選項。

resgen

下列命令會讀取 myResources.txt 中的名稱/值組,並寫入名為 myResources.resources. 的二進位資源檔。因為未明確指定輸出檔名,所以預設會接收相同名稱做為輸入檔。

resgen myResources.txt 

下列命令會讀取 myResources.restext 中的名稱/值組,並且寫入名為 yourResources.resources 的二進位資源檔。

resgen myResources.restext yourResources.resources

下列命令會讀取 XML 架構輸入檔 myResources.resx,並且寫入名稱為 myResources.resources 的二進位資源檔。

resgen myResources.resx myResources.resources

下列命令會讀取二進位資源檔 myResources.resources,並且寫入名為 myResources.resx 的 XML 架構輸出檔。

resgen myResources.resources myResources.resx

下列指令會讀取名稱為 myResources.resx 的 XML 架構輸入檔,並寫入名稱分別為 myResources.txt 和 myResources.restext 的文字檔。請注意,如果 .resx 檔內含任何嵌入的物件,就無法正確的轉換成文字檔。

resgen myResources.resx myResources.txt
resgen myResources.resx myResources.restext

下列命令會讀取 XML 架構輸入檔 myResources.resx,並且寫入名稱為 myResources.resources 的二進位資源檔。它也會利用名為 MyClass 的類別產生名為 MyFile.vb 的 Visual Basic 檔案 (此類別包含與輸入檔中參考的資源相符的強型別屬性)。MyClass 類別包含在名為 Namespace1 的命名空間內。

resgen myResources.resx myResources.resources /str:C#,Namespace1,MyClass,MyFile.cs

請參閱

概念

應用程式中的資源

參考

.NET Framework 工具

System.Resources.Tools

組件連結器 (Al.exe)

SDK 命令提示字元

其他資源

編碼和當地語系化