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元件。 這隻適用於 internal
(Friend
在 Visual Basic 中)、(Protected Friend
在 Visual Basic 中為 ),protected internal
以及 private protected
(Private Protected
在 Visual Basic 中為 ) 成員,但不適用於 private
。
注意
在 (Private Protected
在 Visual Basic 中) 成員的情況下private protected
,InternalsVisibleToAttribute屬性只會將輔助功能延伸至衍生自成員之包含類別的類型。
屬性會在元件層級套用。 這表示它可以包含在原始程式碼檔的開頭,也可以包含在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 。
請勿在 自變數中包含、 Version或 ProcessorArchitecture 字段的值CultureInfo;Visual Basic、C# 和 C++ 編譯程式會將此值視為編譯程式錯誤。 如果您使用的編譯程式未將它視為錯誤(例如 IL 組譯工具 (ILAsm.exe),而且元件具有強名稱, MethodAccessException 則第一次指定的friend元件存取包含 屬性的 InternalsVisibleToAttribute 元件時,就會擲回例外狀況。
如需如何使用此屬性的詳細資訊,請參閱 Friend 元件 和 C++ friend 元件。
取得完整的公鑰
您可以使用 強名稱工具 (Sn.exe) 從強名稱金鑰 (.snk) 檔案擷取完整的公鑰。 若要這樣做,請執行下列步驟:
將公鑰從強名稱金鑰檔案擷取至個別的檔案:
Sn -p <snk_file> <outfile>
向主控台顯示完整的公鑰:
Sn -tp <outfile>
將完整的公鑰值複製並貼到您的原始程式碼中。
使用 C 編譯 friend 元件#
如果您使用 C# 編譯程式編譯 friend 元件,則必須使用 /out 編譯程式選項明確指定輸出檔的名稱(.exe或.dll)。 因為編譯器尚未針對在繫結至外部參考時所建立的組件產生名稱,所以這是必要動作。 / out 編譯程式選項是 Visual Basic 編譯程式的選擇性選項,而使用 F# 編譯程式編譯 friend 元件時,不應該使用對應的 -out 或 -o 編譯程式選項。
使用 C++ 編譯 friend 元件
在 C++ 中,若要讓 friend 元件能夠存取屬性所啟用 InternalsVisibleToAttribute 的內部成員,您必須在 as_friend
C++ 指示詞中使用 屬性。 如需詳細資訊,請參閱 Friend 元件 (C++)。