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

更新:2011 年 4 月

资源文件生成器将文本(.txt 或 .restext)文件和基于 XML 的资源格式 (.resx) 文件转换为公共语言运行时二进制 (.resources) 文件,后者可嵌入到运行时二进制可执行文件中或编译成附属程序集。 有关部署和检索 .resources 文件的信息,请参见应用程序中的资源

Resgen.exe 执行下列转换:

  • 将 .txt 或 .restext 文件转换为 .resources 或 .resx 文件。

    注意注意

    .restext 扩展名在 .NET Framework 2.0 版中引入。.restext 文件的格式与 .txt 文件的格式相同。但是,.restext 扩展名可帮助您更加轻松地识别包含资源定义的文本文件。

  • 将 .resources 文件转换为文本文件或 .resx 文件。

  • 将 .resx 文件转换为文本文件或 .resources 文件。

安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具,我们建议您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也称 CMD Shell)。 您可以使用这些实用程序轻松运行工具,而不需要导航到安装文件夹。 有关更多信息,请参见 Visual Studio 和 Windows SDK 命令提示

  • 如果您的计算机上已安装了 Visual Studio:在任务栏上依次单击 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。

    - 或 -

    如果您的计算机上已安装了 Windows SDK:在任务栏上依次单击 Start、All Programs、Windows SDK 文件夹和 Command Prompt(或CMD Shell)。

  • 在命令提示处,键入下列命令:

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

请参见

参考

System.Resources.Tools

Al.exe(程序集链接器)

Visual Studio 和 Windows SDK 命令提示

概念

应用程序中的资源

其他资源

.NET Framework 工具

编码和本地化

修订记录

Date

修订记录

原因

2011 年 4 月

添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。

信息补充。