日期:2012-11-24  浏览次数:20406 次


一、导言... 3

二、软件环境... 3

三、资源文件... 3

四、创建资源文件... 3

五、使用资源文件... 6

5.1 在命令行编译中使用资源文件... 6

5.2 在Visual Studio.NET中使用资源文件... 8

六、结束语... 9





一、导言

Microsoft的.NET从2002年1月15日第一版发布到今天,已经得到了广泛的使用;从刚推出时国内相关书籍种类寥寥,到今天.NET的相关书籍的大大丰富,已有越来越多的人——初学者或者有经验的程序员,在学习、应用.NET。本文面向对.NET有些了解的者,以C#为例,介绍如何在.NET编程环境中,把资源文件(如包含图片、字符串等的资源文件)嵌入到程序集中。这里的所说的程序集可以是EXE文件,也可是供其他程序调用的DLL文件。



本文不涉及国际化、本地化、打包和部署资源方面的内容,有兴趣的读者可以查阅.NET Framework SDK文档。



二、软件环境

运行本文中的程序需要如下软件环境:Windows 2000/XP, .NET Framework SDK。本文中的代码在如下环境中运行通过:Windows XP Professional, .NET Framework V1.1 , Visual Studio.NET 2003。



三、资源文件

几乎每一个生产性应用程序都需要使用资源。资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储数据,无需重新编译整个应用程序即可更改数据。

在.NET中,有文本文件.resx 文件和 .resources 文件三种资源文件。如果资源将只包含字符串数据,则文本文件是最简单的选择。如果资源将包含对象或字符串与对象的组合,则必须创建 .resx 文件或 .resources 文件。注意,只有 .resources 文件才应能嵌入在公共语言运行库程序集和附属程序集中。



四、创建资源文件

创建资源文件,有编写代码以及利用名为ResEditor的软件这两种途径。以下分述之。



4.1 编写代码创建资源文件

.NET Framework 类库中提供了ResourceWriter 类来创建.resources 文件。ResourceWriter 类包含在System.Resources命名空间中。ResourceWriter 类以系统默认的格式将资源写入输出文件或输出流。

在ResourceWriter 类中使用 AddResource 方法将资源指定为名称和值对。资源名在用于查找时是区分大小写的,但是,为更易于支持创作工具和帮助消除错误,ResourceWriter 将不允许使用仅大小写不同 .resources 文件名。

若要创建一个资源文件,请用唯一的文件名创建 ResourceWriter,至少调用 AddResource 一次,再调用 Generate 将该资源文件写入磁盘,然后调用 Close 关闭该文件。

下面的示例将若干个字符串写入到 myResources.resources 文件中。

//例1

//本示例代码来自 .NET Framework SDK文档

//CreateResTest_1_1.cs

using System;

using System.Resources;



public class WriteResources {

public static void Main(string[] args) {

// Creates a resource writer.

IResourceWriter writer = new ResourceWriter("myResources.resources");



// Adds resources to the resource writer.

writer.AddResource("String 1", "First String");

writer.AddResource("String 2", "Second String");

writer.AddResource("String 3", "Third String");

// Writes the resources to the file or stream, and closes it.

writer.Close();

}

}

编译代码:csc CreateResTest_1_1.cs , 编译成功后,则在工作目录里生成名为CreateResTest_1_1.exe的可执行文件;运行该文件,在工作目录中生成名为string.resources的资源文件。



以上给出了字符串写入资源文件的例子,下面的示例尝试将若干张图片嵌入到资源文件myResources.resources中。

//例2

//CreateResTest_1_2.cs

using System;

using System.Drawing;

using System.Resources;



public class CreatPicResource

{

public static void Main ()

{

// Creates a resource writer.

ResourceWriter rw = new ResourceWriter ( "picture.resources" );



//从指定的文件创建Image对象.

//_Bird.png、 _Butterfly.png文件在当前工作目录

Image _Bird_Pic = Image.FromFile ( "_Bird.png" );

Image _Butterfly_Pic = Image.FromFile ("_Butterfly.png" );



//把Image对象添加到资源文件中

//ResourceWritername.AddResource(string name, object value);

//其中name为资源名,value为资源值

rw.AddResource ( "Bird" , _Bird_Pic );

rw.AddResource ( "Butterfly" , _Butterfly_Pic );



// Writes the resources to the file or stream, and closes it.

rw.Generate ();

rw.Close ();

}

}



确保_Bird.png和_Butterfly.png文件在当前工作目录。编译代码:csc CreateResTest_1_2.cs , 如编译成功,生成CreateResTest_1_2.exe;运行该文件,则生成资源文件picture.resources。