共用方式為


擷取附屬組件中的資源

觀念上,您應該將預設或中性組件的資源與主要組件一起封裝,並為您應用程式所支援的各個語言建立分別的附屬組件。 ResourceManager 類別提供在執行階段對特定文化特性資源的存取,並使用資源後援處理序來控制應用程式擷取資源的方式。 如需詳細資訊,請參閱封裝和部署資源主題中的<資源後援處理序>副標題。 請您盡量透過 ResourceManager 類別建構函式的其中之一來存取資源。 這需要編譯資源成附屬組件,或者應用程式主要組件的一部分。

ResourceManager 根據目前執行緒的 CultureInfo.CurrentUICulture 屬性,決定要擷取哪些資源。 例如,如果應用程式以預設的英文資源和含有法文和德文資源的兩個附屬組件來編譯,而 CurrentUICulture 屬性設定為「de」,ResourceManager 將會擷取德文資源。 如需設定 CurrentUICulture 屬性 (Property) 的詳細資訊,請參閱使用 CurrentUICulture 屬性

下列範例使用 ResourceManager.GetString 方法擷取並顯示字串資源。

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyStrings", Me.GetType().Assembly)
Console.Writeline(rm.GetString("string1"))
…
…
private ResourceManager rm;
rm = new ResourceManager("MyStrings", this.GetType().Assembly);
Console.Writeline(rm.GetString("string1"));
…

這個程式碼會從檔案 MyStrings 擷取並顯示 string1。 被載入的實際字串取決於目前執行緒的 CurrentUICulture 屬性。

下列範例使用 ResourceManager.GetObject 方法擷取並顯示二進位資源 (例如圖形影像)。

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyImages", Me.GetType().Assembly)
PictureBox.Image = Ctype(rm.GetObject("MyObject"), System.Drawing.Image)
…
…
private ResourceManager rm;
rm = new ResourceManager("MyImages", this.GetType().Assembly);
PictureBox.Image = (System.Drawing.Image)rm.GetObject("MyObject");
…

這個程式碼從資源檔 MyImages 載入名為 MyObject 的物件。 它將 MyObject 轉換為 Image 型別,並將它指派給 PictureBox 的影像屬性。 被載入的實際物件取決於目前執行緒的 CurrentUICulture 屬性。

ResourceSet 類別儲存針對單一文化特性進行當地語系化的所有資源。 ResourceSet 不使用資源後援處理序。 因此,ResourceSet 在當地語系化的應用程式中並不是那麼有用處。

附屬組件的版本支援

依照預設,當 ResourceManager 擷取要求的資源時,它會尋找版本號碼符合主要組件版本號碼的附屬組件。 在您部署應用程式之後,您可能會想要更新主要組件或特定資源附屬組件。 .NET Framework 為主要組件和附屬組件的版本控制提供支援。

SatelliteContractVersionAttribute 類別為主要組件提供版本控制支援。 在應用程式的主要組件上指定 SatelliteContractVersionAttribute,可讓您更新和重新部署主要組件,而不必更新其附屬組件。 在您更新主要組件之後,請遞增主要組件的版本號碼,但是要保留原來的附屬合約版本號碼。 當 ResourceManager 擷取要求的資源時,它將會載入這個屬性指定的附屬組件版本。

發行者原則組件則為附屬組件的版本控制提供支援。 您可以更新並重新部署附屬組件,而不需更新主要組件。 在您更新附屬組件之後,遞增它的版本號碼,並連同發行者原則組件一起發行。 在發行者原則組件中,要指定您的新附屬組件與它的先前版本為回溯相容。 雖然 ResourceManager 將使用主要組件的現有附屬合約版本號碼擷取要求的資源,而且將會擷取組件的正確更新版本,因為組件載入器會繫結發行者原則組件中指定的附屬組件版本。 如需發行者原則組件的詳細資訊,請參閱建立發行者原則檔案

若要啟用完整的組件版本控制支援,建議您在全域組件快取中部署強式名稱的組件,並在應用程式目錄中部署沒有強式名稱的組件。 如果您想要在應用程式目錄中部署強式名稱的組件,則在更新組件時,就無法遞增附屬組件的版本號碼, 而是必須在以更新程式碼取代現有程式碼之處,執行就地更新,並保持相同的版本號碼。 例如,如果您想要以完整指定的組件名稱「myApp.resources,Version=1.0.0.0,Culture=de,PublicKeyToken=b03f5f11d50a3a」更新版本 1.0.0.0 的附屬組件,則應以相同完整指定的組件名稱「myApp.resources,Version=1.0.0.0,Culture=de,PublicKeyToken=b03f5f11d50a3a」編譯的更新 myApp.resources.dll 檔案覆寫該組件。 請注意,由於無法遞增版本號碼,因此就地更新附屬組件檔案會使應用程式很難準確地決定附屬組件的版本。

如需組件版本控制的詳細資訊,請參閱組件版本控制Runtime 如何找出組件

請參閱

參考

ResourceManager

概念

應用程式中的資源

封裝和部署資源

執行階段如何找出組件

擷取 .Resources 檔的資源