none
他人的.NET 元件確實安裝在GAC中,在Add References 並不會列出來,也無法使用,如何做到的? RRS feed

  • 問題

  • 在使用他方的.NET 2.0 SDK元件,發生

    安裝完他方的程式後,確實已經把元件安裝到GAC中,他方的範例程式也可以正常使用GAC中這些元件。

    但是我開的新專案中,Add References的.NET頁籤看不到這些元件,範例程式的專案中卻可以看到。

    範例程式的專案可以引用他所有元件,元件中提供的功能都可以正常使用,
    例如:class A 有20個 public methods、5個public Fields,範例程式中都可以正常使用這些methods

    新開的專案中無法從Add References中加入元件,
    也無法在Add References/Browse到 C:\Windows\Assembly\ 下加入元件,
    但如果手動把C:\Windows\Assembly\GAC...\下的dll複製到新開專案的資料夾中,引入使用
    但 Class A 可能就只存取到一兩個Fields,其他功能都失效。

     

    請問是忽略了什麼才不能引用元件,還是他方的元件有作保護?

    謝謝

    2007年1月26日 上午 04:33

解答

  • 那個要使用 CAS (Code Access Security) 以及 Strong Name 來做到。

    強式名稱 (Strong Name) 是由組件的識別 (Identity),也就是其簡單文字名稱、版本號碼及文化特性資訊 (如果有提供),加上公開金鑰和數位簽章所組成的。它是使用對應的私密金鑰,從組件檔案 (包含組件資訊清單的檔案,而組件資訊清單則是包含構成組件的所有檔案的名稱和雜湊) 中產生的。Microsoft® Visual Studio® .NET 和 .NET Framework SDK 中提供的其他開發工具,都能將強式名稱指定給組件。具有相同強式名稱的組件應該是相同的。

    您可以使用強式名稱來簽署組件以確保其名稱是全域唯一的。尤其,強式名稱可以滿足下列需求:

    • 強式名稱可依賴金鑰組 (Key Pairs) 以保證名稱的獨特性。沒有人能夠產生您所產生的相同組件名稱,因為使用不同私密金鑰產生的組件會有不同的名稱。

    • 強式名稱可保護組件的版本世系 (Lineage)。強式名稱可確保沒有人能產生您自己組件的後續版本。使用者可以確定他們載入的組件版本是來自建立用來建置應用程式版本的同一個發行者。

    • 強式名稱可提供強式整體性檢查。通過 .NET Framework 安全性檢查可保證組件內容從建置之後就未經變更。不過,請注意,強式名稱本身並未隱含任何如數位簽章和支援憑證所提供的信任層級。

    當您參考強式名稱的組件時,您會希望取得某些優點,例如版本控制和命名保護。如果強式名稱的組件接著又參考簡單名稱但是不具有這些優點的組件,那麼您就會失去這些由於使用強式名稱的組件所可能衍生的優點,而回復到 DLL 衝突的情況。因此,強式名稱的組件只能參考其他強式名稱的組件。

    如果你要做法,請以 "HOW TO:使用強式名稱簽署組件 " 搜尋 MSDN 或 .NET Framework SDK 文件。

    2007年1月26日 上午 06:44
    版主

所有回覆

  • 可能有保護吧,因為在 .NET Framework 可以設定 Assembly 只能被哪些程式參考。
    2007年1月26日 上午 04:57
    版主
  • 既然.NET Framework 可以設定 Assembly 只能被哪些程式參考。

    那請問,要如何設定才能達得這類的限制? 

    2007年1月26日 上午 05:37
  • 那個要使用 CAS (Code Access Security) 以及 Strong Name 來做到。

    強式名稱 (Strong Name) 是由組件的識別 (Identity),也就是其簡單文字名稱、版本號碼及文化特性資訊 (如果有提供),加上公開金鑰和數位簽章所組成的。它是使用對應的私密金鑰,從組件檔案 (包含組件資訊清單的檔案,而組件資訊清單則是包含構成組件的所有檔案的名稱和雜湊) 中產生的。Microsoft® Visual Studio® .NET 和 .NET Framework SDK 中提供的其他開發工具,都能將強式名稱指定給組件。具有相同強式名稱的組件應該是相同的。

    您可以使用強式名稱來簽署組件以確保其名稱是全域唯一的。尤其,強式名稱可以滿足下列需求:

    • 強式名稱可依賴金鑰組 (Key Pairs) 以保證名稱的獨特性。沒有人能夠產生您所產生的相同組件名稱,因為使用不同私密金鑰產生的組件會有不同的名稱。

    • 強式名稱可保護組件的版本世系 (Lineage)。強式名稱可確保沒有人能產生您自己組件的後續版本。使用者可以確定他們載入的組件版本是來自建立用來建置應用程式版本的同一個發行者。

    • 強式名稱可提供強式整體性檢查。通過 .NET Framework 安全性檢查可保證組件內容從建置之後就未經變更。不過,請注意,強式名稱本身並未隱含任何如數位簽章和支援憑證所提供的信任層級。

    當您參考強式名稱的組件時,您會希望取得某些優點,例如版本控制和命名保護。如果強式名稱的組件接著又參考簡單名稱但是不具有這些優點的組件,那麼您就會失去這些由於使用強式名稱的組件所可能衍生的優點,而回復到 DLL 衝突的情況。因此,強式名稱的組件只能參考其他強式名稱的組件。

    如果你要做法,請以 "HOW TO:使用強式名稱簽署組件 " 搜尋 MSDN 或 .NET Framework SDK 文件。

    2007年1月26日 上午 06:44
    版主
  • 感謝抽空回答問題
    2007年1月26日 上午 07:13