就我而言,我在MyCompany.Office下有一套加載項。
我有一個稱爲MyCompany.Office.dll的共享庫,它由MyCompany.Office.Word.dll和MyCompany.Office.Excel.dll引用,它們都是加載項(您可以很容易地Excel的多個加載項,而不是一個Word和一個Excel,或任何你想要的)。
我所做的是爲解決方案創建一個強名稱密鑰文件,並將其鏈接到所有三個項目中。然後我使用相同的強名稱密鑰文件對所有三個庫進行了簽名。
然後,我創建了一個安裝程序操作,它使用公鑰作爲證據添加CAS條目,而不是文件位置。所以,我的自定義操作最終會調用caspol.exe -m -q -ag "My_Computer_Zone" -strong -hex <my public key> -noname -noversion FullTrust -n "MyCompany_Office" -d "Code group for MyCompany.Office add-ins."
。這使FullTrust能夠使用該公鑰的所有圖書館。
您可以通過打開命令提示符,導航到密鑰文件位置並鍵入sn -Tp mykeyfile.snk
來查看公鑰。如果你想獲得的公共密鑰親語法(如延長SetSecurity),你可以使用這樣的代碼:
private static String GetPublicKeyHexString(String assemblyPath)
{
AssemblyName assmName = Assembly.LoadFile(assemblyPath).GetName();
StringBuilder output = new StringBuilder();
Byte[] publicKey = assmName.GetPublicKey();
foreach(Byte byte in publicKey)
{
output.Append(byte.ToString("x").PadLeft(2, '0'));
}
return output.ToString();
}
我需要嘗試了這一點標記這是一個有效的答案之前,但這個看起來明智的。 – Mathias 2009-10-09 02:01:47
您也可以使用URL作爲證據,並將URL設置爲您的安裝目錄。從而給該文件夾FullTrust中的所有程序集。我不推薦這個。有人可能會在您的安裝文件夾中放置惡意程序集,使其完全信任,然後有人可能會因爲創建漏洞而責怪您。如果有人提出這個建議,我只會提到這一點,這樣你就能明白爲什麼這不是一個好主意。 – HackedByChinese 2009-10-09 03:45:59
謝謝,我相信它的工作原理。實際上,我在msdn論壇上發現了這篇文章,它提出了對SetSecurity項目的小修改,允許添加逗號分隔的dll列表而不是單個dll(線程中的Lex007文章)。這樣,你不必共享相同的密鑰。 http://social.msdn.microsoft.com/forums/en-US/vsto/thread/cec6abb6-4716-4bde-91f2-25fb68abd54e/ – Mathias 2009-10-12 23:16:04