Freigeben über


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 Gültigkeitsbereich in C# oder Friend Gültigkeitsbereich 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 für Typen sichtbar, die von ihrer enthaltenden Klasse abgeleitet sind. Typen und Mitglieder mit private protected Bereich (Private Protected Bereich in Visual Basic) sind in der enthaltenden Klasse oder in Typen, die von ihrer enthaltenden Klasse ableiten, innerhalb der aktuellen Assembly sichtbar

Das Attribut InternalsVisibleToAttribute macht diese Typen und Mitglieder auch für die Typen in einer bestimmten Assembly sichtbar, die als Friend Assembly bezeichnet wird. Dies gilt nur für internal (Friend in Visual Basic), protected internal (Protected Friend in Visual Basic) und private protected (Private Protected in Visual Basic) Mitglieder, aber nicht für private 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 einzige Friend Assembly anzugeben, die auf die internen Typen und Mitglieder der aktuellen Assembly zugreifen kann. Sie können mehrere Friend Assemblys 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 angezeigt werden, wie im folgenden Beispiel dargestellt.

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

Die Friend Assembly wird durch den InternalsVisibleToAttribute Konstruktor identifiziert. Sowohl die aktuelle Assembly als auch die Friend-Assembly müssen unsigniert sein, oder beide Assemblies müssen mit einem starken Namen signiert sein.

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 von InternalsVisibleToAttribute mit Assemblies mit starkem Namen finden Sie im InternalsVisibleToAttribute Konstruktor.

Schließen Sie in das Argument keine Werte für die Felder CultureInfo, Version oder ProcessorArchitecture ein; die Compiler von Visual Basic, C# und C++ behandeln dies als Compilerfehler. Wenn Sie einen Compiler verwenden, der es nicht als Fehler behandelt (z. B. den IL Assembler (ILAsm.exe)) und die Assemblys stark benannte Namen haben, wird das erste Mal, dass die angegebene Freundassembly auf die Assembly zugreift, die das MethodAccessException-Attribut enthält, eine InternalsVisibleToAttribute-Ausnahme ausgelöst.

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 Strong Name Tool (Sn.exe) verwenden, um den vollständigen öffentlichen Schlüssel aus einer stark benannten Schlüsseldatei (.snk) abzurufen. Dazu führen Sie die folgenden Schritte aus:

  1. Extrahieren Sie den öffentlichen Schlüssel aus der Schlüsseldatei mit dem starken 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.

Kompiliere die Freund-Assembly 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 noch nicht den Namen für die Assembly generiert hat, die zum Zeitpunkt der Bindung an externe Verweise erstellt wird. Die /out-Compileroption ist für den Visual Basic-Compiler optional, und die entsprechende Compileroption -out oder -o sollte nicht verwendet werden, wenn Sie Friend-Assemblys mit dem F#-Compiler kompilieren.

Kompilieren Sie die Freund-Assembly mit C++

In C++ müssen Sie das InternalsVisibleToAttribute-Attribut in der C++-Direktive verwenden, um die internen Mitglieder, die durch das as_friend-Attribut aktiviert werden, für eine befreundete Assembly zugänglich zu machen. Weitere Informationen finden Sie unter Friend Assemblies (C++).