建立附屬組件
封裝和部署資源主題中描述的中樞和輪輻模型為開發具有資源應用程式的推薦設計實作。
中樞和輪輻模型需要您將資源置於特定位置,以便可以輕易找到並使用它們。 如果您不按照要求來編譯並命名資源,或如果您不將它們放在正確位置,Common Language Runtime 將無法找出它們。 結果,Runtime 會使用預設資源集合。 如需資源名稱的詳細資訊,請參閱 CultureInfo 類別或封裝和部署資源。
編譯附屬組件
使用組件連結器 (Al.exe),將 .resources 檔編譯成附屬組件。 Al.exe 從您指定的 .resources 檔建立組件。 根據定義,附屬組件只可以包含資源。 它們不能包含任何可執行程式碼。
下列 Al.exe 命令會從檔案 strings.de.resources 建立應用程式 MyApp 的附屬組件。
al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll
下列 Al.exe 命令也會從檔案 strings.de.resources 建立應用程式 MyApp 的附屬組件。 /template 選項可讓附屬組件從父組件 MyApp.dll 繼承組件中繼資料。
al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll
/template:MyApp.dll
下列表格詳細解釋用於這些範例的 Al.exe 選項。
選項 |
說明 |
---|---|
/t:lib |
/t 選項指定您的附屬組件要編譯為程式庫 (.dll) 檔案。 附屬組件不能執行,因為它不包含程式碼並且不是應用程式的主要組件。 因此,您必須儲存附屬組件為 DLL。 |
/embed:strings.de.resources |
/embed 選項在 Al.exe 編譯組件時,指定要使用的資源檔名稱。 注意,您可以在附屬組件中嵌入多個 .resources 檔。 然而,如果您將遵循中樞和輪輻模型,您必須替每一個文化特性編譯一個附屬組件。 然而,您可以為字串和物件建立不同的 .resources 檔。 |
/culture:de |
/culture 選項指定要編譯資源的文化特性。 Runtime 在搜尋指定文化特性的資源時使用這個資訊。 如果您省略這個選項,Al.exe 仍然編譯資源,但執行階段將在使用者要求時無法找到它。 |
/out:MyApp.resources.dll |
/out 選項可以指定輸出檔名稱。 名稱必須遵循命名標準 baseName.resources.extension,其中 baseName 為主要組件的名稱,而 extension 則為可行的副檔名 (例如 .dll)。 注意,Runtime 不能根據它的輸出檔案名稱決定附屬組件的文化特性。 因此以上述 /culture 選項指定文化特性是很重要的。 |
/template:filename |
/template 選項指定要從其中繼承全部組件中繼資料 (除文化特性欄位之外) 的組件。 附屬組件所繼承的組件必須具有強式名稱。 |
如需 Al.exe 可用選項的完整清單,請參閱組件連結器 (Al.exe)。
使用強式名稱編譯附屬組件
如果您想要將附屬組件安裝在全域組件快取中,它們必須具有強式名稱。 強式名稱的組件以有效的公開/私密金鑰組來簽名。 如需強式名稱的詳細資訊,請參閱強式名稱的組件。
當您正在開發應用程式時,您將不可能擁有對最終公開/私密金鑰組的存取權。 為了安裝附屬組件於全域組件快取中,並確保它會按照預期來工作,您可以使用稱為延遲簽名的技術。 當您延遲簽名組件時,您於組建時間內在檔案中為強式名稱 (Strong Name) 簽章保留空間。 實際的簽名會延遲直到日後最終公開/私密金鑰組可用的時候。
取得公開金鑰
為了延遲簽名組件,您必須具有對公開金鑰 (Public Key) 的存取權。 您可以從公司內執行最終簽名的組織取得真實的公開金鑰,或使用強式名稱工具 (Sn.exe) 建立公開金鑰。
下列 Sn.exe 命令會建立測試公開/私密金鑰組,並將它儲存到 TestKeyPair.snk 檔案中。 –k 選項會指定 Sn.exe 建立新的金鑰組,並將它儲存到指定的檔案中。
sn –k TestKeyPair.snk
您可以從含有測試金鑰組的檔案擷取公開金鑰。 下列命令會從 TestKeyPair.snk 擷取公開金鑰,並將它儲存到 PublicKey.snk 中。
sn –p TestKeyPair.snk PublicKey.snk
延遲簽名組件
一旦您已經取得或建立公開金鑰,請使用組件連結器 (Al.exe) 來編譯組件並指定延遲簽名。
下列 Al.exe 命令從 strings.ja.resources 檔案建立應用程式 MyApp 的強式名稱附屬組件。
al /t:lib /embed:strings.ja.resources /culture:ja /out:MyApp.resources.dll /delay+ /keyfile:PublicKey.snk
/delay+ 選項指定要延遲簽名組件。 /keyfile: 選項指定包含公開金鑰的金鑰檔名稱,用來延遲簽名組件。
如需延遲簽名的詳細資訊,請參閱延遲簽名組件。
請注意,強式名稱的組件具有版本資訊,而 Runtime 利用該資訊決定要使用哪個組件以符合繫結要求。 如需這個主題的詳細資訊,請參閱組件版本控制。
重新簽名組件
日後,延遲簽名的附屬組件必須以真正的金鑰組重新簽名。 您可以使用 Sn.exe 這麼做。
下列 Sn.exe 命令會以儲存在 RealKeyPair.snk 檔案中的真實金鑰組簽署 MyApp.resources.dll。 –R 選項會指定 Sn.exe 重新簽署先前簽署過或延遲簽署的組件。
sn –R MyApp.resources.dll RealKeyPair.snk
將附屬組件安裝在全域組件快取中
在資源後援處理序中,全域組件快取是執行階段搜尋資源的第一個位置。 如需詳細資訊,請參閱封裝和部署資源主題中的<資源後援處理序>副標題。 因此,一定要知道如何將資源安裝在全域組件快取中。 您使用強式名稱編譯的附屬組件已準備好可安裝在全域組件快取中。 您可以使用全域組件快取工具 (Gacutil.exe),將組件安裝至快取中。
下列 Gacutil.exe 命令將 MyApp.resources.dll 安裝到全域組件快取中。
gacutil /i:MyApp.resources.dll
/i 選項會指定 Gacutil.exe 要將指定的組件安裝到全域組件快取。 由於這個命令,項目放置在快取中,使這個 .resources 檔中的項目可以被存取。 安裝於快取之後,指定的資源可供所有設計來使用它的應用程式利用。
未安裝在全域組件快取中的附屬組件目錄位置
在您已編譯您的附屬組件之後,它們全部都具有相同名稱。 Runtime 根據在編譯時間以 Al.exe 的 /culture 選項所指定的文化特性和根據各個組件的目錄位置來區別它們。 您必須將您的附屬組件置於預期的目錄位置。
下圖說明您在全域組件快取中沒有安裝的應用程式之範例目錄結構和位置需求。 具有 .txt 和 .resources 檔副檔名的項目不會與最終應用程式一起發行。 這些是用來建立最終附屬資源組件的中繼資源檔。 在這個範例中,您可以用 .resx 檔替代 .txt 檔。 .resx 檔案是唯一可以包含物件的中繼資源檔類型。
附屬組件目錄
注意事項 |
---|
如果您的應用程式包括子文化特性的資源,請將各個子文化特性放在各自的目錄中。不要將子文化特性置於它們主要文化特性目錄的子目錄中。 |