圖 5. 設計器的數據視圖中簡單的 .resx 文件
遺憾的是,只有字符串項能夠在 .resx 編輯器的數據視圖中實際進行編輯。任何二進制數據都需要手動直接輸入到 XML 中(而且只能是 base64 編碼)。因此,直接使用 .resx 文件只對字符串資源有用(盡管間接使用會使 .resx 文件對任何種類的數據都非常有用,我們隨后將討論這一點)。
來自 System.Resources 命名空間的 ResXResourceReader 類將分析 XML 文件,并公開一組命名的、有類型的值。要取得具體的項需要查找它:
using System.Collections;
using System.Resources;
...
public Form1() {
...
using( ResXResourceReader reader =
new ResXResourceReader(@"Resource1.resx") ) {
foreach( DictionaryEntry entry in reader ) {
if( entry.Key.ToString() == "MyString" ) {
// Set form caption from string resource
this.Text = entry.Value.ToString();
}
}
}
}
使用 Add New Item 對話框將 .resx 文件添加到項目中會使該文件作為 Embedded Resource 添加進項目,而編譯項目時則會導致 .resx 數據作為嵌套資源 嵌入(“嵌套資源”是分組到命名容器中的資源)。容器的名稱與作為資源添加的任何文件相同,只是不使用 .resx 擴展名,使用 .resource 擴展名。假定一個項目的默認命名空間是 ResourcesApp 而 .resx 文件名為 Resources1.resx,則嵌套資源的容器名為 ResourcesApp.Resources1.resx,如圖 6 中的 ildasm 所示。
圖 6. 嵌入的 .resources 文件
.resources 擴展名來自于在將 .resx 文件作為資源嵌入之前 Visual Studio .NET 處理該文件時所使用的工具。工具名稱是 resgen.exe,它用來將 .resx XML 格式“編譯”為二進制格式?梢允謩訉 .resx 文件編譯成 .resources 文件,如下所示:
C:\> resgen.exe Resource1.resx
在將 .resx 文件編譯成 .resources 文件以后,就可以使用 System.Resources 命名空間中的 ResourceReader 來枚舉它:
文章來源于領測軟件測試網 http://www.kjueaiud.com/