2010-02-22 74 views
12

我有一個項目,即library.exe。在這裏我引用了一個程序集(logging.dll ver 1.0.3.0),並且給了這個程序集一個強有力的名字。什麼時候我們不應該創建Assembly的強名? 「強命名集會」的缺點是什麼?

現在假設我更改了logging.dll中的一個方法並創建了版本1.0.4.0。

現在當我複製/替換舊的DLL與這個新的我有一個異常。 我知道這個異常是因爲我改變了DLL的版本號。由於這是一個強大的名稱DLL,除非我重建library.exe,否則不允許。

我想用上面的故事說的是

  1. 使用強名稱與裝配,只有當我們將它添加到GAC。
  2. 如果我們有個別程序集需要更新的應用程序,請不要使用強命名程序集。

我正確與點1和2?

什麼時候應該使用強命名的程序集?

「強命名集會」的缺點是什麼?

回答

3

兩者都正確。
如果您事後對組件進行簽名,則不需要使用StrongName,就像使用真正的證書一樣。
在我的看法中,強烈的命名並不值得做任何事情,例如參見this link。那麼你需要它將程序集放到GAC中,但就是這樣。

8

只有當你想將你的程序集放在GAC中時,它才真正需要,但它也有助於防止篡改。改變程序集中的代碼相當容易,所以這給壞人帶來了好處。當你使用強有名的程序集時,你只用私鑰對它進行簽名。人們仍然可以改變你的集會,但他們不能給它同樣的強名,因爲他們沒有你的私人密鑰。在那種情況下.Net拒絕組裝篡改。當他們用新的私鑰簽署你的程序集時,.Net仍然拒絕加載它,因爲程序集的標識已經改變。

有幾種方法可以解決版本控制問題。當你的應用程序想要加載一個v1程序集時,無論如何你都可以告訴它看起來像v2。有關更多信息,請參閱here。另一種選擇是根本不改變組件版本,而只改變組件的文件版本。對於.Net,程序集是一樣的,但是你和你的安裝程序仍然可以看到哪一個更新。請參閱AssemblyFileVersion屬性。

相關問題