2009-01-15 154 views
0

在許多地方,像的app.config/web.config文件中我用這個冗長的完全限定名指定類型,如爲什麼我必須爲本地程序集使用完全合格的程序集名稱?

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

This MSDN site說,這

部分裝訂,其中僅指定 程序集名稱,不允許 引用 .NET Framework中的程序集。

好的,很好 - 但爲什麼在某些地方,比如定義我自己的自定義跟蹤偵聽器時,我不能使用部分綁定,當我引用自己的非強命名本地部署的程序集時?這有什麼更深的理由嗎?

回答

0

我想象它的一部分與此有關:

http://blogs.msdn.com/suzcook/archive/2003/05/30/57159.aspx

LoadWithPartialName在V2我假設在許多地方,使用了配置文件處理程序集名稱貶值。

儘管它應該起作用(它只是被折舊,而不是被刪除),但我想他們在內部對所有調用它的東西進行了更改,包括如何處理配置文件。

+0

謝謝。這讓我們瞭解了一些情況,但是這篇文章似乎在討論如何使用GAC中的部分名稱加載程序集。雖然這對於GAC部署的程序集確實很有意義,但它仍不適用於本地程序集。 – 2009-01-15 20:42:00

+0

就是這樣,如果你沒有明確指定你想要的組件,融合將會在GAC和其他地方尋找組件。加載程序集就是關於所有這些東西。 – casperOne 2009-01-15 20:48:40

0

這是一個安全問題。當它查找程序集時,綁定器遵循特定的一組目錄。如果我想惡意破壞你的應用程序,我可以在一個組件中定義你的類型。您的代碼將加載這個未簽名的,不受信任的程序集,並開始執行我的代碼,並使用您的代碼運行的任何特權。其次,版本很重要,因爲它允許依賴共享程序集的已部署應用程序得到安全更新,因爲.net允許您在GAC程序集中指定更新的策略。

最後,在.net中定義相同類型的兩個程序集是完全合法的,這些程序集可能由不同的作者或公司編寫,因此完全限定的名稱可以保護您的代碼不會做錯誤的事情。

相關問題