资源文件生成器 (Resgen.exe)
资源文件生成器将 .txt 文件和 .resx(基于 XML 的资源格式)文件转换为公共语言运行库二进制 .resources 文件,该文件可嵌入运行库二进制可执行文件或编译成附属程序集。有关部署和检索 .resources 文件的信息,请参见应用程序中的资源。
Resgen.exe 执行下列转换:
- 将 .txt 文件转换为 .resources 文件或 .resx 文件。
- 将 .resources 文件转换为文本文件或 .resx 文件。
- 将 .resx 文件转换为文本文件或 .resources 文件。
resgen [parameters] [/compile]filename.extension [outputFilename.extension] [/str:lang[,namespace[,class[,file]]]]
参数
参数 | 说明 |
filename.extension | 要转换的输入文件的名称。extension 必须是下列值之一: 指定要转换为 .resources 文件或 .resx 文件的文本文件的扩展名。文本文件只能包含字符串资源。 指定要转换为 .resources 文件或 .txt 文件的基于 XML 的资源文件的扩展名。 指定要转换为 .resx 文件或 .txt 文件的资源文件的扩展名。 |
outputFilename.extension | 要创建的资源文件的名称。 从 .txt 或 .resx 文件转换时,此参数是可选的。将文本文件或 .resx 文件转换为 .resources 文件时,可以指定 .resources 扩展名。如果不指定 outputFilename,Resgen.exe 将在输入 filename 参数中追加一个 .resources 扩展名并将该文件写入包含 filename 的目录。 从 .resources 文件转换时,outputFilename 参数是强制的。将 .resources 文件转换为基于 XML 的 .resources 文件时,请指定 .resx 扩展名。将 .resources 文件转换为文本文件时,请指定 .txt 扩展名。只有当 .resources 文件仅包含字符串值时,才应将 .resources 文件转换为 .txt 文件。 |
选项 | 说明 |
/compile | 使您可以在单个批量操作中指定多个要转换为 .resources 文件的 .resx 文件或 .txt 文件。如果不指定此选项,则只能指定一个输入文件参数。 |
/publicClass | 作为公共类创建强类型的资源类。 如果未使用“/str:”选项,则忽略此选项。 |
/r: assembly | 指定将要从 assembly 加载的类型。如果指定此选项,则具有某早期版本的类型的 .resx 文件将使用 assembly 中的类型。 |
/str:language[,namespace[,classname[,filename]]] | 使用 language 选项中指定的编程语言(C# 或 Visual Basic)创建强类型资源类文件。使用 namespace 选项可指定项目的默认命名空间,使用 classname 选项可指定所生成的类的名称,使用 filename 选项可指定类文件的名称。 |
/usesourcepath | 指定输入文件的当前目录将被用于解析相对文件路径。 |
备注
Resgen.exe 通过包装由下列四类实现的方法来转换文件:
- ResourceReader 类读取 .resources 文件。
- ResourceWriter 类从指定的资源创建 .resources 文件。
- ResXResourceReader 类读取 .resx 文件。
- ResXResourceWriter 类从指定的资源创建 .resx 文件。
请注意,由 ResXResourceWriter 创建的 .resx 文件不能直接由 .NET Framework 应用程序使用。在将该文件添加到应用程序之前,通过 Resgen.exe 运行该文件以将其转换为 .resources 文件。有关在代码中实现这些类的更多信息,请参见它们各自的参考主题。
为了使 Resgen.exe 能够分析输入,.txt 文件和 .resx 文件遵循正确的格式是非常关键的。
文本文件只能包含字符串资源。如果需要将所编写的应用程序中的字符串翻译成多种语言,则字符串资源很有用。例如,通过使用适当的字符串资源,可以很容易地本地化菜单字符串。Resgen.exe 读取包含名称/值对的文本文件,其中名称是描述资源的字符串,值是资源字符串本身。必须在每行上分别指定每个名称/值对,如下例所示:
name=value
请注意,文本文件中允许使用空字符串。例如:
EmptyString=
Resgen.exe 检查文本文件中是否有重复的资源名。如果文本文件包含重复的资源名,Resgen.exe 将发出警告,并忽略重复的名称。有关文本文件格式的更多详细信息,请参见文本文件格式的资源。
.resx 资源文件格式由 XML 项组成。与 .txt 文件相似,可以在这些 XML 项中指定字符串资源。与 .txt 文件相比,.resx 文件的主要优势在于还可以指定或嵌入对象。查看 .resx 文件时,如果嵌入对象(如图片)的二进制格式是资源清单的一部分,则可以实际看见此二进制信息。与 .txt 文件一样,可以用文本编辑器(如记事本或 Microsoft Word)打开 .resx 文件,编写、分析和操作其中的内容。注意:要完成这一步,必须非常熟悉 XML 标签和 .resx 文件结构。有关 .resx 文件格式的更多详细信息,请参见 .Resx 文件格式中的资源。
若要创建包含嵌入的非字符串对象的 .resources 文件,必须或者使用 Resgen.exe 转换包含对象的 .resx 文件,或者使用由 ResourceWriter 类提供的方法,直接从代码中将对象资源添加到文件中。如果使用 Resgen.exe 将包含对象的 .resources 文件转换为 .txt 文件,则所有字符串资源都会被正确转换,但非字符串对象的数据类型也会作为字符串写入该文件。在转换过程中将丢失嵌入的对象,并且 Resgen.exe 在检索资源时将报告有错误发生。
.NET Framework 2.0 版支持强类型资源。通过创建包含一组静态只读 (get) 属性的类,强类型资源支持对资源的封装访问,从而提供了另一种使用资源的方式,而不是直接使用 ResourceManager 类的方法。这一基本功能由 Resgen.exe 中的 /str 命令行选项提供,该选项包装了StronglyTypedResourceBuilder 类的功能。指定 /str 选项时,Resgen.exe 的输出是一个包含强类型属性的类,这些属性与输入参数中引用的资源相匹配。此类提供了对所处理文件中可用资源的强类型只读访问。
资源文件生成器 (Resgen.exe) 工具可使您创建 .resources 文件以及用来访问这些 .resources 文件的强类型包装。创建强类型包装时,.resources 文件的名称必须与生成的代码的命名空间和类名(例如,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.txt 中的名称/值对,并写一个名为 yourResources.resources
resgen myResources.txt yourResources.resources
下面的命令读取基于 XML 的输入文件 myResources.resx,并写一个名为 myResources.resources
resgen myResources.resx myResources.resources
下面的命令读取二进制资源文件 myResources.resources,并写一个名为 myResources.resx
resgen myResources.resources myResources.resx
下面的命令读取基于 XML 的输入文件 myResources.resx,并写一个名为 myResources.txt
resgen myResources.resx myResources.txt
下面的命令读取基于 XML 的输入文件 myResources.resx,并写一个名为 myResources.resources 的二进制资源文件。它还生成一个名为 MyFile.vb 的 Visual Basic 文件,该文件中有一个名为 MyClass 的类,其中包含与输入文件中引用的资源相匹配的强类型属性。MyClass 类包含在名为 Namespace1
resgen myResources.resx myResources.resources /str:C#,Namespace1,MyClass,MyFile.cs