asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

深入剖析Asp.net资源文件


发布日期:2024年06月15日
 
深入剖析Asp.net资源文件

资源文件的定义

简单点的说法就是程序中可以使用的数据字符串图片或二进制数据等等实际上可以包含任何类型的文件

资源文件可以有多个语言版本这样在开发全球化应用程序时就很重要这个特性是通过SystemResources空间下的ResourceManager类来完成需要在什么时候调用那个版本的在VSNET中将一个文件的属性设置为Embedded Resource就可以使资源被嵌入到Assembly中了

资源文件包含那些类型?

SystemResources 空间支持三种资源文件txt 文件只能有字符串资源因为不能被嵌入到 Assembly 中所以很容易暴露被客户修改最大缺点是仅支持字符串资源所以不推荐使用resx 文件由 XML 组成可以加入任何资源包括二进制同样不能被嵌入到Assembly 中在 SystemResources 名字空间中有专用读写的类VSNET 创建这种文件然后将其转成 resources 文件并根据设置将其嵌入到 Assembly 中resources 文件PE格式可以加入任何资源唯一可以被嵌入到 Assembly 的文件在 SystemResources 名字空间中有专用读写的类

怎么调用资源文件?

通常的做法是要将txt 文件resx 文件等转化成resources 文件在通过ResourceManager来进行调用但是我们也可以不采用那种方式我觉得比较麻烦象下面这样做我觉得好些我们可以不通过一个资源文件而直接将一资源嵌入到 Assembly 中这可以在 VSNET 中通过设置一文件的 Build 属性为 Embedded Resource 实现在这种情况下 ResourceManager 就没有用了因为它只能获取 resources 资源文件那么怎么调用这类的资源呢?我们需要利用一些 Reflection 中的特征我们只要了解一些 SystemReflectionAssembly 这个类中的一些函数就可以了有三个相关函数不过我们只需要 AssemblyGetManifestResourceStream 这个函数这个函数将一嵌入到Assembly 中的资源以 stream 的方式返回而我们可以将这个 stream 转成在 NET 中可用的对象比如如果嵌入资源是一图片那么我们可以利用 New Bitmap(Stream) 这个 Bitmap 的 constructor 获得这个图片资源的 Bitmap 对象如果我们嵌入的是一文本文件我们可以使用StreamReader将它的内容读出来

下面给一个简单的以文本文件为资源的DEMO

step: 资源文件

将文件嵌入Assembly上面已说了怎么做

step: 调用资源文件

public Stream GetEmbeddedResource()

{

return SystemReflectionAssemblyGetExecutingAssembly()GetManifestResourceStream(ResoureceDemotesttxt) ;//关键的一句

}//ResoureceDemotesttxt解释一哈

//ResoureceDemo表示命名空间testtxt文本文件名称

private void button_Click(object sender SystemEventArgs e)

{

Stream sResponse;

StreamReader srResponse;

sResponse=GetEmbeddedResource();

srResponse=new StreamReader(sResponse);

string txtDemo=srResponseReadToEnd()ToString();

labelText =txtDemo;

}

当然以图片格式的方式也一样的操作不在举例了最后有个工具大家不要忘了resgenexe 专门用来做资源文件类型之间的转换支持 txt <> resx <> resources 之间的转换

上一篇:ASP.NET2.0中创建自定义配置

下一篇:在ASP.NET 2.0中使用页面导航控件