[轉]Curstom WebControl:將靜態文件編譯進dll (WebResource)

摘自:蟲蟲的垃圾箱 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文件的資源路徑 是一個只讀的字符串常量。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章