资源文件生成器 (Resgen.exe)

更新:2007 年 11 月

资源文件生成器将文本(.txt 或 .restext)文件和基于 XML 的资源格式 (.resx) 文件转换为公共语言运行库二进制 (.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

指定要转换为 .resources 文件或文本(.txt 或 .restext)文件的基于 XML 的资源文件的扩展名。

.resources

指定要转换为 .resx 文件或文本(.txt 或 .restext)文件的资源文件的扩展名。

outputFilename.extension

要创建的资源文件的名称。

从 .txt、.restext 或 .resx 文件转换时,此参数是可选的。将文本文件或 .resx 文件转换为 .resources 文件时,可以指定 .resources 扩展名。如果不指定 outputFilename,Resgen.exe 将在输入 filename 参数中追加一个 .resources 扩展名,并将该文件写入到包含 filename 的目录中。

从 .resources 文件转换时,outputFilename 参数是强制的。将 .resources 文件转换为基于 XML 的资源文件时,请指定 .resx 扩展名。将 .resources 文件转换为文本文件时,请指定 .txt 或 .restext 扩展名。只有当 .resources 文件仅包含字符串值时,才应将 .resources 文件转换为 .txt 文件。

选项

说明

/compile

使您可以在单个批量操作中指定要转换为多个 .resources 文件的多个 .resx 文件或文本文件。如果不指定此选项,则只能指定一个输入文件参数。

此选项不能与 /str: 选项一起使用。

/publicClass

作为公共类创建强类型的资源类。

如果未使用 /str: 选项,则忽略此选项。

/r:assembly

指定将要从 assembly 加载的类型。如果指定此选项,则具有某早期版本的类型的 .resx 文件将使用 assembly 中的类型。

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

使用 language 选项中指定的编程语言(cs 或 C# 表示 C#,vb 或 visualbasic 表示 Visual Basic)创建强类型资源类文件。使用 namespace 选项可指定项目的默认命名空间,使用 classname 选项可指定所生成的类的名称,而使用 filename 选项可指定类文件的名称。

说明:

在 .NET Framework 2.0 版中,如果未指定 namespace,则会忽略 classname 和 filename。

使用 /str: 选项时只允许有一个输入文件,因此该选项无法与 /compile 选项一起使用。

如果指定了 namespace 但未指定 classname,则类名称从输出文件名派生(例如用下划线替代句点)。因此强类型资源可能无法正确工作。要避免这种情况,可同时指定类名和输出文件名。

/usesourcepath

指定输入文件的当前目录将被用于解析相对文件路径。

备注

Resgen.exe 通过包装由下列四类实现的方法来转换文件:

请注意,由 ResXResourceWriter 类创建的 .resx 文件不能直接由 .NET Framework 应用程序使用。在将该文件添加到应用程序之前,通过 Resgen.exe 运行该文件以将其转换为 .resources 文件。有关在代码中实现这些类的更多信息,请参见它们各自的参考主题。

为了使 Resgen.exe 能够分析输入,文本文件和 .resx 文件遵循正确的格式是非常关键的。

文本(.txt 或 .restext)文件只能包含字符串资源。如果需要将所编写的应用程序中的字符串翻译成多种语言,则字符串资源很有用。例如,通过使用适当的字符串资源,可以很容易地本地化菜单字符串。Resgen.exe 读取包含名称/值对的文本文件,其中名称是描述资源的字符串,值是资源字符串本身。必须在每行上分别指定每个名称/值对,如下例所示:

name=value

请注意,文本文件中允许使用空字符串。例如:

EmptyString=

除非文本文件仅包含纯罗马字母表中的字符而没有发音符(如下加符、元音变音符和颚化符),否则,必须用 UTF-8 或 Unicode 编码保存文本文件。例如,Resgen.exe 在处理没有使用 UTF-8 或 Unicode 编码的文本文件时将移除扩展 ANSI 字符。

Resgen.exe 检查文本文件中是否有重复的资源名。如果文本文件包含重复的资源名,Resgen.exe 将发出警告,并忽略重复的名称。有关文本文件格式的更多详细信息,请参见文本文件格式的资源

.resx 资源文件格式由 XML 项组成。如同在文本文件中一样,可以在这些 XML 项内指定字符串资源。与文本文件相比,.resx 文件的主要优势在于还可以指定或嵌入对象。查看 .resx 文件时,如果嵌入对象(如图片)的二进制格式是资源清单的一部分,则可以实际看见此二进制信息。如同文本文件一样,可以用文本编辑器(如记事本或 Microsoft Word)打开 .resx 文件,并编写、分析和操作其中的内容。注意:要完成这一步,必须非常熟悉 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 文件的名称必须与生成的代码的命名空间和类名(例如,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 的二进制资源文件。它还生成一个名为 MyFile.vb 的 Visual Basic 文件,该文件中有一个名为 MyClass 的类,其中包含与输入文件中引用的资源相匹配的强类型属性。MyClass 类包含在名为 Namespace1 的命名空间中。

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

请参见

概念

应用程序中的资源

参考

.NET Framework 工具

System.Resources.Tools

程序集链接器 (Al.exe)

SDK 命令提示

其他资源

编码和本地化