共用方式為


強式名稱

上述問題的解決方案,為用戶端應用程式建置更獨特的元件組件。這個獨特的組建,可以用版本號碼和稱做召集人的特殊值來識別。系統可以隔離這些元件組件,讓不同的用戶端應用程式可以同時執行不同的版本 - 這在過去是不可能的。這種保護系統有時稱做並存執行 (對應回溯相容性執行),因為應用程式能和相同應用程式的其他版本共同執行,不影響各自的執行環境。

4_Shared 子目錄中有一個程式碼,示範如何加入這些其他組建屬性,以及如何建立受保護的可共用元件。如果在 3_SimplePath 的程式碼上建置,這個步驟會加入第二個可共用元件來反轉字串陣列。

首先,您將建置這個新的元件組件,並且不指定任何會造成共用的選項。如果您只用 BuildNoShare.bat (在 \4_Shared\ 子目錄中) 之類的來編譯新的 Reverser.dll 元件,您可以使用 Ildasm.exe 來檢查中繼資料,它會指出組件缺少召集人而且沒有建立版本號碼:

.assembly Reverser
{  ...
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}

您必須使用私密金鑰來編譯組件,才能將它標示為可共用組件 (公開金鑰是用於驗證)。所以在編譯之前,您必須先產生公開/私密金鑰組 (Key Pair)。您可以使用強式名稱工具 (Sn.exe) 產生新的金鑰組,並且將它放在檔案中 (在 \4_Shared\Reverser 子目錄中):

sn –k orgKey.snk

有了私密金鑰後,您就可以編譯元件,指定金鑰檔案以及要指派的版本號碼。只要在 Reverser.cs 檔中,使用 STRONG 條件式編譯符號,指定 AssemblyVersionAssemblyKeyFile 屬性即可:

#if STRONG
[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
[assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")]
#endif

然後,在編譯處理序中定義 STRONG

csc.exe /define:STRONG ... Reverser.cs

如果在 Reverser.dll 中再度執行 Ildasm.exe,即可根據 .publickey 屬性和 .ver 屬性中的預設值是否不為 1.0.0.0,來驗證組件能否共用:

.assembly Reverser
{  ...
  .publickey = (00 ... FC 4A DC 9B 9C)
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

如需強式名稱工具 (SN.exe) 的詳細資訊,請參閱這個教學課程的附錄 B:封裝和部署工具中有關這個公用程式的章節。

請參閱

部署共用元件 | (5) 元件版本控制 | 封裝和部署摘要 | 附錄 A:其他封裝和部署資訊 | 附錄 B:封裝和部署工具