通用資源概念
相容語言使用 .NET Framework 執行設計程式時的外觀大致相同,因為每個支援的語言編譯器都會產生自我描述的 Managed Microsoft Intermediate Language (MSIL) 程式碼。所有 Managed 程式碼都是針對 Common Language Runtime 執行,它會提供跨語言整合、自動記憶體管理、跨語言例外狀況處理、更高階的安全性以及元件互動簡化模型。除了 Runtime 之外,.NET Framework 還有類別庫,任何和 .NET 相容的語言都能存取。如果建置的應用程式需要使用資源,這個通用開發處理序的幾個外觀就變得十分重要。
建置組塊
您和別人建立的 .NET Framework 類別庫,也會列入階層命名空間組織中,並且存入可攜式執行檔 (PE) 中 - 通常是 DLL 和 EXE 檔案。PE 檔案中可以有多個命名空間 - 包含巢狀命名空間 - 而且一個命名空間可以橫跨多個 PE 檔案。 一或多個 PE 檔案 (可能還加上資源等其他檔案型別) 結合成組件 (實體單位) 後,才能進行部署、版本編號以及重複使用。Runtime 使用一些組件來尋找及繫結這些參考型別。資源可以繫結到組件中,或是分別以不同的格式封裝,甚至當做個別檔案 - 例如 JPEG 影像 - 較為方便。組件資訊清單中有類別和資源等的組件相關資訊。
文化特性
.NET Framework 中的文化特性是指使用者的語言,有時還可以包含使用者的位置。指定文化特性,即可使用某種資訊的一組和使用者的語言和位置協定對應的通用喜好設定,例如,字串、日期格式和號碼格式。
所謂的位置,可能是國家或地區;後者可能是未經正式認可的國家正確地緣位置。語言和位置可以用 Internet RFC 1766<Tags for the Identification of Languages>定義的代碼來指定。實際的代碼本身是由二個 ISO 標準 (ISO 639<Code for the representation of names of languages>和 ISO 3166<Codes for the representation of names of countries>) 定義的。有關這些標準的其他參考資訊,請參閱附錄 A:其他資源資訊中的主題「語言和國家/地區標記」。
使用文化特性標記存取 CultureInfo 類別的執行個體,即可獲得文化特性喜好設定的詳細資訊。文化特性標記格式 primary[-secondary] 中的 primary 標記是語言,選擇性項目 secondary 標記是國家/地區碼。語言標記通常是二個小字英文字母,國家/地區標記是二個大寫英文字母。請參閱下面的文化特性標記範例表。
de | 德文 |
de-AT | 奧地利德文 |
de-CH | 瑞士德文 |
en | 英文 |
en-US | 美國英文 |
en-AU | 澳大利亞英文 |
en-CA | 加拿大英文 |
fr | 法文 |
sp | 西班牙文 |
.NET Framework 中的二個英文字母標記代表某語言特有的文化特性,如中性語言,例如,德文的 de。四個英文字母標記代表特定文化特性,例如,加拿大使用的法文 fr-CA。使用者介面通常會指定為特定文化特性。但是很多特殊中性文化特性只有一個特定文化特性 (例如日本日文的 ja-JP),此時,二個標記多半可以交換使用。應用程式若要為特定文化特性設定文化特性 - 也許是為了回應 Internet 瀏覽器設定值 - 應用程式應該使用 CreateSpecificCulture 方法來對應所有中性文化特性,以符合特定文化特性。
.NET Framework 中的文化特性,可以取代國家語言支援 (NLS) 地區設定,它採用地區設定 ID (LCID) 碼。CultureInfo 類別的 LCID 屬性,可以協同運作以及簡化整合 NLS 架構軟體。
.NET 資源類別
.NET Framework 類別庫提供許多類別,可以防止開發人員在應用程式和工具中使用資源。
ResourceManager 類別
Run Time 時,ResourceManager 類別 (在 System.Resources 命名空間中) 很容易就能存取文化特性正確的資源。如果沒有當地語系化資源,這個類別可以提供資源回溯 (通常對中性文化特性),還可支援資源序列化,並能提供 CreateFileBasedResourceManager 方法來存取組件中沒有封裝的資源。當然,建立自訂資源方案時,開發人員也能從 ResourceManager 中衍生。
ResourceWriter 類別
ResourceWriter 類別 (在 System.Resources 命名空間中) 可以將系統預設格式中的資源,寫到輸出檔或資料流中。AddResource 方法可以將資源指定為名稱值配對。查詢時,資源名稱區分大小寫,但如果名稱只有大小寫上的差異,ResourceWriter 不會將資源名稱寫到 .resources 檔案中。開發人員可以覆蓋 ResourceWriter 類別提供的 IResourceWriter 介面預設實作 (Implementation)。
**注意 **撰寫資源的順序,不一定要是以程式設試方式加入的順序。
ResourceReader 類別
ResourceReader 類別 (在 System.Resources 命名空間中) 可以列舉 .resources 檔案和資料流,並且可以讀取循序資源名稱值配對。開發人員可以覆蓋這個類別提供的 IResourceReader 介面預設實作,例如,ResourceWriter 類別。
ResourceSet 類別
ResourceSet 類別 (在 System.Resources 命名空間中) 可以儲存某個文化特性的所有當地語系化資源。所有資源會立即載入記憶體中。ResourceSet 不回溯,這點不同於 ResourceManager。因此,最初在當地語系化應用程式之外建立工具和公用程式時,ResourceSet 十分有用。ResourceSet 也能用來控制資源快取 (例如,防止快取影像)。
CultureInfo 類別
CultureInfo 類別 (在 System.Globalization 命名空間中) 中只有一組使用者喜好設定資訊,不同於使用者的語言、次語言 (Sublanguage)、國家/地區及文化特性慣例。這個類別可用來製作日期、時間和數字等格式、排序字串,以及決定文字語言選項。
RegionInfo 類別
RegionInfo 類別 (在 System.Globalization 命名空間中) 可用來決定度量單位,並且可以將地區碼對應到地區名稱。
Assembly.GetManifestResourceStream 方法
Assembly.GetManifestResourceStream 方法 (在 System.Reflection 命名空間中) 可以直接將資訊清單資源資料,載入到資料流中。這在資源是以 ResourceManager 無法識別的自訂格式儲存時,尤其有用。
**注意 **資源必須在組件中才能使用 Assembly.GetManifestResourceStream 方法。
Thread.CurrentUICulture 屬性
需要判斷目前的文化特性或是需要設定文化特性模擬在不同當地語系化版 Windows 中執行的情形時,Thread.CurrentUICulture 屬性 (在 System.Threading 命名空間中) 就十分有用。因為控制台無法在沒有多語系使用者介面的 Windows 2000 中顯示多種使用者介面 LCID,所以需要它Run Time 時,可以根據每個執行緒來設定文化特性。
部署
如果情況單純,任何有安裝 Common Language Runtime 的電腦,都能在本機上執行獨立 .NET Framework 可執行檔。它沒有任何需求,不必登錄項目,也不會中斷或停止執行任何應用程式,您只要刪除檔案 (如果檔案是在本機複製的),即可清除應用程式,不在電腦上留下任何足跡。從代表網站的 URL 執行應用程式時,行為上會稍有不同。它的組件都安裝在下載快取中,而且稍後會自動清除。代表檔案的 URL 等的其他應用程式,是從原始程式碼執行,不在本機電腦上快取。
散發
當然,大部分的用戶端應用程式會再封裝為通用散發格式 - 例如,.cab 或 .msi 檔案 - 而且很多是以應用程式發佈機制安裝,例如,Windows 2000 IntelliMirror 或 Microsoft Systems Management Server (SMS),二者都採用 Microsoft Installer 技術。有關 Microsoft Installer 的詳細資訊,請參閱 Win32 SDK 中的對應章節。
請參閱
建立資源 | 使用程式碼擷取資源 | 資源摘要 | 附錄 A:其他資源資訊 | 附錄 B:資源工具