System.Runtime.CompilerServices.InternalsVisibleToAttribute 類別

本文提供此 API 參考文件的補充備註。

屬性 InternalsVisibleToAttribute 會指定只有目前元件內通常可見的類型才會顯示在指定的元件中。

一般而言,在 C# 中具有範圍的類型和成員internal,或 Friend Visual Basic 中的範圍只會顯示在定義它們的元件中。 具有 protected internal 範圍的類型和成員(Protected Friend Visual Basic 中的範圍)只能在自己的元件中顯示,或是衍生自其包含類別的類型。 具有 private protected 範圍的類型和成員(Private Protected Visual Basic 中的範圍)會顯示在包含類別或衍生自目前元件內其包含類別的類型中

屬性 InternalsVisibleToAttribute 可讓指定元件中的型別和成員看見這些類型和成員,這稱為friend元件。 這隻適用於 internalFriend在 Visual Basic 中)、(Protected Friend在 Visual Basic 中為 ),protected internal以及 private protectedPrivate Protected在 Visual Basic 中為 ) 成員,但不適用於 private

注意

在 (Private Protected在 Visual Basic 中) 成員的情況下private protectedInternalsVisibleToAttribute屬性只會將輔助功能延伸至衍生自成員之包含類別的類型。

屬性會在元件層級套用。 這表示它可以包含在原始程式碼檔的開頭,也可以包含在Visual Studio專案中的AssemblyInfo檔案中。 您可以使用 屬性來指定可存取目前元件內部類型和成員的單一 Friend 元件。 您可以透過兩種方式定義多個Friend元件。 這些屬性可以顯示為個別元件層級屬性,如下列範例所示。

[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>

它們也可以以個別 InternalsVisibleToAttribute 標記顯示,但單 assembly 一關鍵詞,如下列範例所示。

[assembly:InternalsVisibleTo("Friend2a"), 
          InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
 Assembly:InternalsVisibleTo("Friend2b")>

friend 元件是由建 InternalsVisibleToAttribute 構函式所識別。 目前的元件和friend元件都必須不帶正負號,或兩個元件都必須以強名稱簽署。

如果這兩個元件都是未簽署的,自 assemblyName 變數是由friend元件的名稱所組成,沒有指定目錄路徑或擴展名。

如果這兩個元件都以強名稱簽署,則建構函式的自變數 InternalsVisibleToAttribute 必須包含元件的名稱,不含其目錄路徑或擴展名,以及完整的公鑰(而非其公鑰令牌)。 若要取得強名稱元件的完整公鑰,請參閱 本文稍後的取得完整公鑰 一節。 如需搭配強名稱元件使用 InternalsVisibleToAttribute 的詳細資訊,請參閱建構函式 InternalsVisibleToAttribute

請勿在 自變數中包含、 VersionProcessorArchitecture 字段的值CultureInfo;Visual Basic、C# 和 C++ 編譯程式會將此值視為編譯程式錯誤。 如果您使用的編譯程式未將它視為錯誤(例如 IL 組譯工具 (ILAsm.exe),而且元件具有強名稱, MethodAccessException 則第一次指定的friend元件存取包含 屬性的 InternalsVisibleToAttribute 元件時,就會擲回例外狀況。

如需如何使用此屬性的詳細資訊,請參閱 Friend 元件C++ friend 元件

取得完整的公鑰

您可以使用 強名稱工具 (Sn.exe) 從強名稱金鑰 (.snk) 檔案擷取完整的公鑰。 若要這樣做,請執行下列步驟:

  1. 將公鑰從強名稱金鑰檔案擷取至個別的檔案:

    Sn -p <snk_file> <outfile>

  2. 向主控台顯示完整的公鑰:

    Sn -tp <outfile>

  3. 將完整的公鑰值複製並貼到您的原始程式碼中。

使用 C 編譯 friend 元件#

如果您使用 C# 編譯程式編譯 friend 元件,則必須使用 /out 編譯程式選項明確指定輸出檔的名稱(.exe或.dll)。 因為編譯器尚未針對在繫結至外部參考時所建立的組件產生名稱,所以這是必要動作。 / out 編譯程式選項是 Visual Basic 編譯程式的選擇性選項,而使用 F# 編譯程式編譯 friend 元件時,不應該使用對應的 -out-o 編譯程式選項。

使用 C++ 編譯 friend 元件

在 C++ 中,若要讓 friend 元件能夠存取屬性所啟用 InternalsVisibleToAttribute 的內部成員,您必須在 as_friend C++ 指示詞中使用 屬性。 如需詳細資訊,請參閱 Friend 元件 (C++)。