篇一:基础应用
资源文件通常被用在多语言版本的产品和项目当中,通过简单的设置和引用即可实现不同语言的转变,相当的方便。在.Net中一般可以包括字符串、图像、图标、音频、文本文件等,有相当一部分人和公司在开发的过程中都把这些资源放置在专门的文件夹中(我和我目前的公司也如此),通过相对路径加以引用,也很方便。
从一开始学习编程就避免不了要接触这类东西,其中用的最多的是字符串;学习Basic和VB时,经常将一些字符串放在txt文件中,学习Delphi时又将它们放在ini文件中,学习ASP.Net时又将它们放在Web.Config和xml文件中,学习Java时将它们放在专有的xml文件中,我想很多人说不定也会有我同样的经历,这不仅反应了行业发展的一些时尚应用,也反应出相当一部分人喜新厌旧的爱好。
最近在写一个小的店务管理的项目,专门为一个好朋友开发的(她是开店的,呵呵!)。某天忽然想拿资源文件来用用,于是在项目中新建了一个Resource.resx文件,它通常都放在App_GlobalResources这个文件夹中,调用起来也非常方便,下面是我在项目中的简单应用过程:
1、新建资源文件Resource.resx,VS2005自动将其放在App_GlobalResources文件夹中;
2、打开资源文件,输入常用的字符串,文件里面是一些key/value的集合,key用来做引用的标识,value用来表示字符串的值;(保存后可以看到Resource.resx实际是一个xml文件)
3、在系统里面进行引用:
cs文件中的引用:string strHint = Resources.Resource.key
aspx文件中的普通引用(字符显示):<td><%=Resources.Resource.key %> </td>
aspx文件中的属性值引用(做属性值):<asp:RequiredFieldValidator ID="rfvSNum" runat="server" ErrorMessage="<%$ Resources:Resource, key %> " ControlToValidate="tbSNum" Display="dynamic" />
注:Resources是命名空间,Resource是.Net中操作资源文件的类,key为自己在资源文件中设置的键。
篇二:深入讨论
一、资源文件的定义
简单点的说法就是程序中可以使用的数据,象:字符串,图片或二进制数据等等,实际上可以包含任何类型的文件。
资源文件可以有多个语言版本,这样在开发全球化应用程序时就很重要。这个特性是通过System.Resources空间下的ResourceManager类来完成需要在什么时候调用那个版本的。在VS.NET中将一个文件的属性设置为Embedded Resource就可以使资源被嵌入到Assembly中了。
二、资源文件包含那些类型
System.Resources 空间支持三种资源文件:。txt 文件,只能有字符串资源。因为不能被嵌入到 Assembly 中,所以很容易暴露,被客户修改。最大缺点是仅支持字符串资源,所以不推荐使用。resx 文件,由 XML 组成,可以加入任何资源,包括二进制。同样不能被嵌入到Assembly 中。在 System.Resources 名字空间中有专用读写的类。VS.NET 创建这种文件然后将其转成 .resources 文件并根据设置将其嵌入到 Assembly 中。。resources 文件,PE格式,可以加入任何资源。唯一可以被嵌入到 Assembly 的文件,在 System.Resources 名字空间中有专用读写的类。
三、怎么调用资源文件?
通常的做法是要将。txt 文件。resx 文件等转化成。resources 文件在通过ResourceManager来进行调用,但是我们也可以不采用那种方式,我觉得比较麻烦,象下面这样做我觉得好些:我们可以不通过一个资源文件而直接将一资源嵌入到 Assembly 中。这可以在 VS.NET 中通过设置一文件的 Build 属性为 Embedded Resource 实现。在这种情况下 ResourceManager 就没有用了,因为它只能获取 .resources 资源文件。那么怎么调用这类的资源呢?我们需要利用一些 Reflection 中的特征。我们只要了解一些 System.Reflection.Assembly 这个类中的一些函数就可以了。有三个相关函数,不过我们只需要 Assembly.GetManifestResourceStream 这个函数。这个函数将一嵌入到Assembly 中的资源以 stream 的方式返回,而我们可以将这个 stream 转成在 .NET 中可用的对象。比如,如果嵌入资源是一图片,那么我们可以利用 New Bitmap(Stream) 这个 Bitmap 的 constructor 获得这个图片资源的 Bitmap 对象;如果我们嵌入的是一文本文件,我们可以使用StreamReader将它的内容读出来。
下面给一个简单的以文本文件为资源的DEMO
step1: 资源文件
将文件嵌入Assembly,上面已说了怎么做
step2: 调用资源文件
public Stream GetEmbeddedResource()
{
return System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ResoureceDemo.test.txt") ;//关键的一句
}//ResoureceDemo.test.txt解释一哈
//ResoureceDemo表示命名空间,test.txt文本文件名称
private void button1_Click(object sender, System.EventArgs e)
{
Stream sResponse;
StreamReader srResponse;
sResponse=GetEmbeddedResource();
srResponse=new StreamReader(sResponse);
string txtDemo=srResponse.ReadToEnd().ToString();
label1.Text =txtDemo;
} feedom.net
当然,以图片格式的方式也一样的操作。不在举例了,最后有个工具大家不要忘了:resgen.exe 专门用来做资源文件类型之间的转换。支持 .txt <-> .resx <-> .resources 之间的转换。