從 .NET Framework 3.5 Service Pack 1(SP1)版本開始,當組件載入至全信任AppDomain物件(例如MyComputer區域的預設AppDomain值)時,強名稱簽章不會被驗證。 這被稱為強名繞過功能。 在完全信任的環境中,對於已簽署的完全信任元件,StrongNameIdentityPermission 的要求都一定會成功,無論其簽署為何。 唯一的限制是該組件必須被完全信任,因為其所在的區域是完全信任的。 因為強名在這些條件下並非決定性因素,因此沒有理由去驗證。 繞過強名稱簽名的驗證,能帶來顯著的效能提升。
繞過功能適用於任何未延遲簽署且從其ApplicationBase屬性指定的目錄載入至任何全信任AppDomain的全信任組件。
你可以透過設定登錄檔鍵值來覆蓋電腦上所有應用程式的繞過功能。 你可以透過應用程式設定檔來覆蓋單一應用程式的設定。 如果註冊表金鑰已經停用了繞過功能,你就無法為單一應用程式恢復該功能。
當您覆寫繞過功能時,強名稱只會被驗證其正確性,並不檢查是否符合其他條件,例如 StrongNameIdentityPermission。 如果你想確認某個強名,必須另外進行該檢查。
這很重要
強制強名稱驗證的能力依賴於登錄檔金鑰,詳述如下程序。 如果應用程式使用的帳號沒有存取控制清單(ACL)權限來存取該註冊表機碼,那麼該設定將無效。 您必須確保此鍵的 ACL 權限已設定,以便所有組件都能讀取。
關閉所有應用程式的強名稱繞過功能
在 32 位元電腦的系統登錄檔中,於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 鍵下,建立一個名稱為
AllowStrongNameBypass且值為 0 的 DWORD 項目。在 64 位元電腦的系統登錄檔中,於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 和 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework 鍵下,建立一個 DWORD 條目,名稱為
AllowStrongNameBypass,並將其值設為 0。
關閉單一應用程式的強名稱繞過功能
打開或建立應用程式設定檔。
欲了解更多關於此檔案的資訊,請參閱 「配置應用程式」中的應用程式組態檔案(Application Configuration Files)章節。
請補充以下條目:
<configuration> <runtime> <bypassTrustedAppStrongNames enabled="false" /> </runtime> </configuration>
你可以透過移除設定檔設定或將屬性 true設為 來恢復應用程式的繞過功能。
備註
只有當電腦啟用繞過功能時,才能為應用程式開啟或關閉強名稱驗證。 如果電腦的繞過功能已被關閉,所有應用程式的強式名稱都必須經過驗證,且無法單獨繞過某一應用程式的驗證。