现在的位置: 首页 > 综合 > 正文

[转]Curstom WebControl:将静态文件编译进dll (WebResource)

2013年01月30日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

摘自:虫虫的垃圾箱 http://hi.baidu.com/anuiz/blog/item/20614ac2eaba1434e4dd3b6f.html

做自定义服务器控件的时候常需要将静态文件编译进一个dll中。今天尝试了一下,做个记录,免得忘了。

1,资源文件的添加
首先在Curstom WebControl的工程里添加一个文件夹,名字任意,一般叫做 Resources。把所有想要编译的资源统统拖到这个文件夹里去。
将该文件夹里所有文件的 Build Action 属性修改为 Embedded Resource.
在 AssemblyInfo.cs 里,将所有的文件编译信息添加进去,写法如下:
    [assembly: WebResource("ResourceTest.Resources.Icon.bmp","image/bmp")]
     (别忘了在 AssemblyInfo.cs 文件头部 using System.Web.UI;)
ResourceTest.Resources.Icon.bmp 就是这个文件的路径,ResourceTest是这个工程的namespace,Resources是那个文件夹,Icon.bmp就是文件名。
image/bmp 是资源文件的MIME属性, js文件为 text/javascript ,html文件是 text/html ,gif为 image/gif 等等。
这时编译工程,资源就能被编译到dll里去了。

2,资源文件的使用
资源文件使用起来也是很方便的,一般通过以下方法获得资源文件的Url:
              string url = Page.ClientScript.GetWebResourceUrl(this.GetType(), "ResourceTest.Resources.Icon.bmp");
获得的url一般是这样:
/WebAppName/WebResource.axd?d=DuWo...SdnEciZx0&t=63....203
其实资源文件就是通过一个处理WebResource.axd的HttpHandler获取的。

顺便写一下服务器控件里注册js文件的代码:
         protected override void OnLoad(EventArgs e)
          {
              Type t = this.GetType();
              string url = Page.ClientScript.GetWebResourceUrl(t, SCRIPTFILE);
              if (!Page.ClientScript.IsClientScriptIncludeRegistered(SCRIPTFILE))
              {
                  Page.ClientScript.RegisterClientScriptInclude(SCRIPTFILE, url);
              }
          }

SCRIPTFILE 就是js文件的资源路径 是一个只读的字符串常量。

 

抱歉!评论已关闭.