System.Runtime.CompilerServices.InternalsVisibleToAttribute-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Das InternalsVisibleToAttribute Attribut gibt an, dass Typen, die nur innerhalb der aktuellen Assembly sichtbar sind, für eine angegebene Assembly sichtbar sind.

Normalerweise sind Typen und Member mit internal Bereich in C# oder Friend Bereich in Visual Basic nur in der Assembly sichtbar, in der sie definiert sind. Typen und Member mit protected internal Bereich (Protected Friend Bereich in Visual Basic) sind nur in ihrer eigenen Assembly oder in Typen sichtbar, die von ihrer enthaltenden Klasse abgeleitet sind. Typen und Member mit private protected Bereich (Private Protected Bereich in Visual Basic) sind in der enthaltenden Klasse oder in Typen sichtbar, die von ihrer enthaltenden Klasse innerhalb der aktuellen Assembly abgeleitet sind.

Das InternalsVisibleToAttribute Attribut macht diese Typen und Member auch für die Typen in einer angegebenen Assembly sichtbar, die als Freundassembly bezeichnet wird. Dies gilt nur internal für (Friend in Visual Basic), protected internal(Protected Friend in Visual Basic) und private protected (Private Protected in Visual Basic) Member, aber nicht private für Elemente.

Hinweis

Im Fall von private protected (Private Protected in Visual Basic)-Membern erweitert das InternalsVisibleToAttribute Attribut die Barrierefreiheit nur auf Typen, die von der enthaltenden Klasse des Elements abgeleitet sind.

Das Attribut wird auf Assemblyebene angewendet. Dies bedeutet, dass sie am Anfang einer Quellcodedatei enthalten sein kann oder in die AssemblyInfo-Datei in einem Visual Studio-Projekt eingeschlossen werden kann. Sie können das Attribut verwenden, um eine einzelne Freundassembly anzugeben, die auf die internen Typen und Member der aktuellen Assembly zugreifen kann. Sie können mehrere Freundassemblys auf zwei Arten definieren. Sie können als einzelne Attribute auf Assemblyebene angezeigt werden, wie das folgende Beispiel veranschaulicht.

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

Sie können auch mit separaten InternalsVisibleToAttribute Tags, aber einem einzelnen assembly Schlüsselwort (keyword) angezeigt werden, wie im folgenden Beispiel dargestellt.

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

Die Friend-Assembly wird vom InternalsVisibleToAttribute Konstruktor identifiziert. Sowohl die aktuelle Assembly als auch die Freundassembly müssen nicht signiert sein, oder beide Assemblys müssen mit einem starken Namen signiert werden.

Wenn beide Assemblys nicht signiert sind, besteht das assemblyName Argument aus dem Namen der Freundassembly, angegeben ohne Verzeichnispfad oder Dateinamenerweiterung.

Wenn beide Assemblys mit einem starken Namen signiert sind, muss das Argument für den InternalsVisibleToAttribute Konstruktor aus dem Namen der Assembly bestehen, ohne den Verzeichnispfad oder die Dateinamenerweiterung zusammen mit dem vollständigen öffentlichen Schlüssel (und nicht dem öffentlichen Schlüsseltoken). Informationen zum Abrufen des vollständigen öffentlichen Schlüssels einer assembly mit starkem Namen finden Sie im Abschnitt "Abrufen des vollständigen öffentlichen Schlüssels " weiter unten in diesem Artikel. Weitere Informationen zur Verwendung InternalsVisibleToAttribute mit assemblys mit starkem Namen finden Sie im InternalsVisibleToAttribute Konstruktor.

Schließen Sie keine Werte für das CultureInfoArgument oder VersionProcessorArchitecture das Feld in das Argument ein. Die Compiler visual Basic, C# und C++ behandeln dies als Compilerfehler. Wenn Sie einen Compiler verwenden, der ihn nicht als Fehler behandelt (z. B. il Assembler (ILAsm.exe)) und die Assemblys stark benannt sind, wird eine MethodAccessException Ausnahme ausgelöst, wenn die angegebene Freundassembly zum ersten Mal auf die Assembly zugreift, die das InternalsVisibleToAttribute Attribut enthält.

Weitere Informationen zur Verwendung dieses Attributs finden Sie unter Friend-Assemblys und C++-Freundassemblys.

Abrufen des vollständigen öffentlichen Schlüssels

Sie können das Tool für starke Namen (Sn.exe) verwenden, um den vollständigen öffentlichen Schlüssel aus einer Datei mit starkem Namen (.snk) abzurufen. Dazu führen Sie die folgenden Schritte aus:

  1. Extrahieren Sie den öffentlichen Schlüssel aus der Datei mit starkem Namen in eine separate Datei:

    Sn -p <snk_file> <outfile>

  2. Zeigen Sie den vollständigen öffentlichen Schlüssel für die Konsole an:

    Sn -tp <outfile>

  3. Kopieren Sie den vollständigen Öffentlichen Schlüsselwert, und fügen Sie ihn in Den Quellcode ein.

Kompilieren der Freundassembly mit C#

Wenn Sie den C#-Compiler zum Kompilieren der Freundassembly verwenden, müssen Sie explizit den Namen der Ausgabedatei (.exe oder .dll) mithilfe der Compileroption /out angeben. Dies ist erforderlich, da der Compiler den Namen für die Assembly, die er erstellt, noch nicht generiert hat, wenn er Bindungen an externe Referenzen vornimmt. Die /out-Compileroption ist für den Visual Basic-Compiler optional, und die entsprechende Compileroption -out oder -o sollte nicht verwendet werden, wenn Sie Freundassemblys mit dem F#-Compiler kompilieren.

Kompilieren der Freundassembly mit C++

In C++ müssen Sie das Attribut in der C++-Direktive verwendenas_friend, damit die internen Member durch das InternalsVisibleToAttribute Attribut für eine Freundassembly aktiviert werden können. Weitere Informationen finden Sie unter Friend Assemblies (C++).