什麼是衛星程式集
在進行程式的國際化過程中,我常把包含特定語言文化資源打包放進程式集中,只是包含一些字元串、圖片等等資源,而不包含任何代碼,這樣的程式集叫做衛星程式集。
衛星程式集的套用
和版本號一樣,程式集還將語言文化作為其標識的一部分。例如,我可能有一個專門用於德語的程式集,一個用於瑞士德語的程式集和一個用於美國英語的程式集。語言文化通過一個包含主標記和次標記的字元串來標識。
一般來說,如果創建的是包含代碼的程式集,就沒有必要指定語言文化。這是因為代碼代碼通常不包含任何特定的語言文化。沒有指定語言文化的程式集是culture neutral的。如果你設計的應用程式包含特定的語言文化資源,微軟強烈建議你創建包含代碼和應用程式默認(或後備)資源的程式集。在生成程式集時,不用指定語言文化。該程式集將被其他程式集引用,來創建和操作類型。
現在,你可以創建一個或多個只包含特定語言的單獨的程式集——不包含任何代碼。使用語言文化標記的程式集稱為衛星程式集(satellite assembly)。它們指定了能夠正確反映其中資源的語言文化。應該為支持的所有語言文化創建衛星程式集。
通常使用AL.exe創建衛星程式集,而不必使用編譯器,因為衛星程式集中不應該包含代碼。在使用AL.exe時,使用/c[ulture]:text開關來指定所需的語言文化,text為字元串,如en_US代表美國英語。在部署衛星程式集時,要將其放置在與語言文化的text相符的子目錄中。例如,如果應用程式根目錄為C:\MyApp,美國英語的衛星程式集應該在C:\MyApp\en-US子目錄中。在運行時,使用System.Resources.ResourceManager類訪問衛星程式集的資源。
注意,創建包含代碼的衛星程式集是可能的,儘管並不提倡這么做。如果你願意,可以使用System.Reflection.AssemblyCultureAttribute自定義特性來指定語言文化。例如:
// Set assembly's culture to Swiss German
[assembly: AssemblyCulture("de-CH")] 通常情況下,不應該創建引用衛星程式集的程式集。換句話說,一個程式集的AssemblyRef條目指向的應該都是語言文化中性(culture-neotral)的程式集。如果要訪問包含在衛星程式集中的類型或成員,你應該使用反射技術。