resx

.resx 檔案,屬於資源檔案 ,由 XML 組成,可以加入任何資源,包括二進制。同樣不能被嵌入到 Assembly 中。在 System.Resources 名字空間中有專用讀寫的類。VS. NET 創建這種檔案然後將其轉成 .resources 檔案並根據設定將其嵌入到 Assembly 中。同樣,資源檔案也分全局資源檔案和本地資源檔案,全局資源檔案在任何頁面中都可以調用,本地資源檔案只在對應的頁面中被調用

基本介紹

  • 中文名:資源檔案
  • 外文名:.NET Managed Resources File
  • 使用平台:.net
  • 儲存方式:XML
  • 檔案後綴:.resx
概述,資源檔案打包,獲取資源檔案,

概述

資源檔案很早就有了,在 .Net時代里這個東西也不算稀奇,在進行多國語言化的時候,通常把不同翻譯的文字存放到資源包里。以前資源檔案除了放字元串以外,還可以放檔案。不過在C#的工程裡面,資源管理面板是空的(vc++工程里資源面板可以使用),無法直接編輯資源屬性,不過每個WinForm都會帶一個.resx的檔案,這個檔案就是WinForm的資源檔案。如果通過添加新項目的方法,給工程里添加資源檔案的話,產生的也是.resx檔案。估計.resx檔案是.net給c#新設計的資源檔案格式。.resx以XML格式保存,主要存放字元串。對於檔案我還沒有找到添加到.resx的方法,因此我們需要用其它方法把檔案打包資源檔案裡面。

資源檔案打包

.net除了.resx資源檔案格式外,還有一個.resources的資源檔案格式。它可以支持把檔案的載入,需要做通常的做法如下:
System.Resources.ResourceWriter rw = new ResourceWriter(@"..\..\abc.resources");
rw.AddResource("abc", new byte[10000000]);
rw.Generate();
rw.Close();
創建一個ResourceWriter的對象用於寫資源檔案。檔案的後綴名必須是.resources,不讓其它的系統無法識別。然後是通過AddResource的方法寫資源信息,這個信息可以是一個字元串,也可以是一個byte數組,甚至可以是一個對象(image)。添加好以後就是Generate和close了。這樣運行程式後,資源檔案就製作完成了。
如果不需要把這個資源檔案打包到exe程式或者dll程式裡面,可以使用System.Resources.ResourceReader讀取資源檔案信息。

獲取資源檔案

資源檔案打包好以後,下一步是把資源檔案集成到項目里。方法有兩個,一個是用控制台的方式編譯項目,通過載入資源檔案的方式把資源載入到exe里,另外一個簡單很多,就是把直接把資源檔案載入到工程里,vs會根據後綴名識別出來載入的檔案屬於資源檔案,在進行編譯的時候會自動把這個檔案打包到資源檔案里。如果編譯後發現資源檔案沒有加到exe檔案,可以設定資源檔案的屬性,把Build Action的屬性設定為Embedded Resource。
資源檔案成功加到exe檔案後,下一步就是在程式里讀取資源檔案。
System.Resources.ResourceManager rm = new System.Resources.ResourceManager("Resunce.abc", this.GetType().Assembly);
byte[] bit = rm.GetObject("abc") as byte[];
通常是創建一個ResourceManager的對象,第一個參數是資源的名字,這裡要注意的是“Resunce”是編譯的時候,組件(命名空間)名字,“abc”是資源檔案的名字。如果前面不是通過VS的工程檔案進行編譯,而是通過控制台方式直接編譯,那么資源的名字不需要帶組件的名字,只是“abc”就可以了。原因嗎,我估計可能是vs在進行編譯的時候,帶了某些參數(確定了組件名),所以在項目讀取資源檔案的時候需要帶組件名。
4.資源檔案打包工具
資源檔案里載入檔案就兩個操作,一個是創建資源檔案,一個是讀取資源檔案。在創建資源檔案的時候如果沒有什麼特殊要求,可以通過資源打包工具來創建。在SDK裡面的例子程式有一個打包工具,對其進行編譯就可以用了。

相關詞條

熱門詞條

聯絡我們