C# 资源文件格式转换

来源:互联网 发布:sql注入漏洞修复建议 编辑:程序博客网 时间:2024/06/07 19:21

http://msdn.microsoft.com/zh-cn/library/ccec7sz1(v=vs.80).aspx

资源文件生成器将 .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 必须是下列值之一:

.txt

指定要转换为 .resources 文件或 .resx 文件的文本文件的扩展名。文本文件只能包含字符串资源。

.resx

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

.resources

指定要转换为 .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) 将资源嵌入运行库二进制可执行文件或者将其编译为附属程序集。

Note注意

如果出于某种原因 Resgen.exe 失败,则返回值将为 –1。

Note注意

生成强类型资源类时,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 的基于 XML 的输出文件。

resgen myResources.resources myResources.resx

下面的命令读取基于 XML 的输入文件 myResources.resx,并写一个名为 myResources.txt 的 .txt 文件。请注意,如果 .resx 文件包含任何嵌入对象,则这些嵌入对象不会准确地转换为 .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