您的位置:首页 > 编程语言 > ASP

如何从程序集中获取资源

2010-12-28 17:00 253 查看
 
Asp.net可获取的资源,总共有4种:
1.       程序集中的直接嵌入的文件,如:图像、js文件、html文件等。
2.       站点内部的直接嵌入的文件,如:图像、js文件、html文件等。
3.       程序集中的直接嵌入的资源文件(后缀名为“.resx”)。
4.       站点内部的App_GlobalResources目录下的资源文件(后缀名为“.resx”)。
 
 
Asp.net除了第2种可以直接在页面中引用外,其他3种资源的获得方式有5种。
1.       GetWebResourceUrl方法:可以直接获取程序集中的直接嵌入的文件的url字符串。
2.       ResourceManager方法:可以获取程序集中直接嵌入的资源文件(后缀名为“.resx”)。
3.       直接让studio平台用ResXFileCodeGenerator工具生成强类型资源类,然后引用。
4.       Assembly.GetManifestResourceStream方法:可以直接获取DLL中的直接嵌入的文件。
5.       Resources.[资源文件名].ResourceManager.GetString("jj"):可以直接获取站点内部的App_GlobalResources目录下的资源文件。
 
Asp.net可以建立.resx类型的资源文件,也可以在程序集中嵌入图像、js文件、html文件等。这2种都是资源,但提取的方式有所不同。
直接嵌入程序集的资源(在程序集中嵌入图像、js文件、html文件等),通常用System.Web.UI.ClientScriptManager的GetWebResourceUrl方法来提取,ClientScriptManager类通过Page.ClientScript暴露。在控件内部,可以通过this.Page.ClientScript得到ClientScriptManager实例。
使用GetWebResourceUrl方法的程序集的属性文件AssemblyInfo.cs必须要将资源文件进行注册。

[assembly: WebResourceAttribute("eee.01.jpg","image/jpg")]
[assembly: WebResourceAttribute("eee.02.jpg", "image/jpg")]
[assembly: WebResourceAttribute("eee.ee.01.jpg", "image/jpg")]
 
但Asp.net可以建立.resx类型的资源文件,则需要使用System.Resources.ResourceManager来提取。
 
使用System.Resources.ResourceManager提取所获得的可以是字符串、图像、图标、音频、文件、其他等对象。可以在服务端的执行代码中使用。但不能直接暴露给客户端。
而使用GetWebResourceUrl方法所获得的是一个字符串,该字符串是服务端文件(图像、js、html等)的url地址。不能用在服务端的执行代码中。
如果要在服务端读取程序集中的文件,必须使用其他方法。

从程序集中获取图形文件
 
如下方法从ppp.ppp1类所在的程序集中获取了01.jpg图形文件,该文件存在于fff目录,该程序集的默认空间名为kkk。



<%@ WebHandler Language="C#" Class="Handler" %>
 
using System;
using System.IO;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Reflection;
 
public class Handler : IHttpHandler
{   
    public void ProcessRequest (HttpContext context)
    {
 
        Assembly assembly = typeof(ppp.ppp1).Assembly ;
 
        System.IO.Stream stream
            = assembly.GetManifestResourceStream("kkk.fff.01.jpg");
       
        Image imgObj = Image.FromStream(stream);
 
        Bitmap raster;
        raster = new Bitmap(imgObj);
       
        context.Response.ClearContent();
        context.Response.ContentType = "image/jpeg";
        raster.Save
                (
                    context.Response.OutputStream,
                    System.Drawing.Imaging.ImageFormat.Jpeg
                );
       
        context.Response.Flush();
        stream.Close();
        raster.Dispose();
        context.Response.End();
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
 
}
 
 
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息