Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

InternalsVisibleToAttribute-Klasse

 

Veröffentlicht: Juli 2016

Gibt an, dass Typen, die i. d. R. nur innerhalb der aktuellen Assembly sichtbar sind, auch in einer angegebenen Assembly angezeigt werden können.

Namespace:   System.Runtime.CompilerServices
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Attribute
    System.Runtime.CompilerServices.InternalsVisibleToAttribute

[AttributeUsageAttribute(AttributeTargets.Assembly, AllowMultiple = true, 
	Inherited = false)]
public sealed class InternalsVisibleToAttribute : Attribute

NameBeschreibung
System_CAPS_pubmethodInternalsVisibleToAttribute(String)

Initialisiert eine neue Instanz der InternalsVisibleToAttribute-Klasse mit dem Namen der angegebenen Friend-Assembly.

NameBeschreibung
System_CAPS_pubpropertyAllInternalsVisible

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Diese Eigenschaft ist nicht implementiert.

System_CAPS_pubpropertyAssemblyName

Ruft den Namen der Friend-Assembly ab, für die alle mit dem Schlüsselwort internal gekennzeichneten Typen und Typmember sichtbar gemacht werden sollen.

System_CAPS_pubpropertyTypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für diese Instanz zurück.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodIsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodMatch(Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.(Geerbt von „Attribute“.)

In der Regel, Typen und Member mit internal Bereich (in c#) und friend Bereich (in Visual Basic) werden nur in der Assembly, in dem sie definiert sind. Die InternalsVisibleToAttribute Attribut Weise können sie auch auf Typen in einer angegebenen Assembly, die als Friend-Assembly bezeichnet wird.

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

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

Sie können auch angezeigt, mit separatenInternalsVisibleToAttribute Tags, aber ein einzelnes assembly -Schlüsselwort, wie im folgenden Beispiel veranschaulicht.

[assembly:InternalsVisibleTo("Friend2a"), 
          InternalsVisibleTo("Friend2b")]

Friend-Assembly wird durch identifiziert die InternalsVisibleToAttribute Konstruktor. Die aktuelle Assembly und die Friend-Assembly müssen ohne Vorzeichen sein, oder beide Assemblys müssen mit einem starken Namen signiert werden.

Wenn beide Assemblys ohne Vorzeichen, die assemblyName Argument besteht aus den Namen der Friend-Assembly, ohne die Dateinamenerweiterung für ein Verzeichnis Pfad- oder Dateiname angegeben.

Wenn beide Assemblys angemeldet sind, mit einem starken Namen das Argument für die InternalsVisibleToAttribute Konstruktor muss den Namen der Assembly ohne dessen Verzeichnis Pfad- oder Dateiname Dateinamenerweiterung, zusammen mit der vollständigen öffentlichen Schlüssel (und nicht dessen Token des öffentlichen Schlüssels) bestehen. Um vollständigen öffentlichen Schlüssels der Assembly mit starkem Namen zu erhalten, finden Sie unter der Abrufen der vollständigen öffentlichen Schlüssels Abschnitt weiter unten in diesem Artikel. Weitere Informationen zur Verwendung von InternalsVisibleToAttribute mit Assemblys mit starkem Namen finden Sie unter der InternalsVisibleToAttribute Konstruktor.

Verwenden Sie keine Werte für die CultureInfo, Version, oder ProcessorArchitecture Feld im Argument; die Visual Basic, c# und C++-Compiler, behandeln Sie dies als ein Compilerfehler ausgelöst. Wenn Sie einen Compiler verwenden, die nicht als Fehler behandelt (wie z. B. die IL-Assembler (ILAsm.exe)) und die Assemblys mit starkem Namen, eine MethodAccessException ausgelöster Ausnahme beim ersten angegebenen Friend-Assembly greift auf die Assembly mit der InternalsVisibleToAttribute Attribut.

Weitere Informationen zur Verwendung dieses Attributs finden Sie unter den folgenden Themen:

Sie können die Strong Name-Tool (Sn.exe) zum Abrufen des vollständigen öffentlichen Schlüssels aus einer Schlüsseldatei mit starkem Namen (.snk). Zu diesem Zweck führen Sie die folgenden Schritte aus:

  1. Extrahieren Sie den öffentlichen Schlüssel aus der Schlüsseldatei mit starkem Namen in einer separaten Datei:

    "Sn" -p snk_fileAusgabedatei

  2. Den vollständigen öffentlichen Schlüssel in der Konsole anzeigen:

    "Sn" - tp Ausgabedatei

  3. Kopieren Sie den vollständigen öffentlichen Schlüssel-Wert in Ihren Quellcode.

Wenn Sie den C#-Compiler verwenden, um die Friend-Assembly zu kompilieren, müssen Sie den Namen der Ausgabedatei (.exe oder .dll) explizit angeben, mit der /out -Compileroption. 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 optional für Visual Basic-Compiler und die entsprechende -out oder -o Compileroption sollte nicht verwendet werden, beim Kompilieren von Friend-Assemblys mit den f#-Compiler.

In C++ wird damit auch die internen Elemente aktiviert, indem die InternalsVisibleToAttribute -Attribut auf eine Friend-Assembly zugegriffen werden kann, müssen Sie die as_friend Attribut in der C++-Direktive. Weitere Informationen finden Sie unter Friend-Assemblys (C++).

Signierte Assemblys

Im folgenden Beispiel wird die InternalsVisibleToAttribute -Attribut ein internal Methode mit dem Namen AppendDirectorySeparator in eine signierte Assembly in eine andere signierte Assemblys sichtbar sein. Definiert eine FileUtilities Klasse, die eine interne enthält AppendDirectorySeparator Methode. Die InternalsVisibleToAttribute -Attribut angewendet wird, auf die Assembly mit der FileUtilities Klasse. Das Attribut ermöglicht es eine Assembly namens Friend1 diesen internen Member zuzugreifen.

//
// The source code should be saved in a file named Example1.cs. It 
// can be compiled at the command line as follows:
//
//    csc /t:library /keyfile:<snkfilename> Assembly1.cs
//
// The public key of the Friend1 file should be changed to the full
// public key stored in your strong-named key file.
//
using System;
using System.IO;
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Friend1, PublicKey=002400000480000094" + 
                              "0000000602000000240000525341310004000" +
                              "001000100bf8c25fcd44838d87e245ab35bf7" +
                              "3ba2615707feea295709559b3de903fb95a93" +
                              "3d2729967c3184a97d7b84c7547cd87e435b5" +
                              "6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" +
                              "712da72eec2533dc00f8529c3a0bbb4103282" +
                              "f0d894d5f34e9f0103c473dce9f4b457a5dee" +
                              "fd8f920d8681ed6dfcb0a81e96bd9b176525a" +
                              "26e0b3")]

public class FileUtilities
{
   internal static string AppendDirectorySeparator(string dir)
   {
      if (! dir.Trim().EndsWith(Path.DirectorySeparatorChar.ToString()))
         return dir.Trim() + Path.DirectorySeparatorChar;
      else
         return dir;
   }
}

Wenn im folgenden Beispiel wird in einer Assembly mit starkem Namen mit dem Namen kompiliert wird Friend1, die Example.Main Methode in Friend1 kann erfolgreich Aufrufen der FileUtilities.AppendDirectorySeparator -Methode, obwohl die Methode interne ist die Assembly1 Assembly. Beachten Sie, dass wenn Sie in c# über die Befehlszeile kompilieren, müssen Sie verwenden die /out -Compilerschalter verwenden, stellen Sie sicher, dass der Name der Friend-Assembly verfügbar ist, wenn der Compiler, externe Verweise bindet.

//
// The source code should be saved in a file named Friend1.cs. It 
// can be compiled at the command line as follows:
//
//    csc /r:Assembly1.dll /keyfile:<snkfilename> /out:Friend1.dll Friend1.cs
//
// The public key of the Friend1 assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
using System;

public class Example
{
   public static void Main()
   {
      string dir = @"C:\Program Files";
      dir = FileUtilities.AppendDirectorySeparator(dir);
      Console.WriteLine(dir);
   }
}
// The example displays the following output:
//       C:\Program Files\

Nicht signierte Assemblys

Im folgenden Beispiel wird die InternalsVisibleToAttribute -Attribut ein internal Mitglied eine unsignierte Assembly sichtbar ist, zu einem anderen nicht signierte Assembly. Das Attribut stellt sicher, dass die internalStringLib.IsFirstLetterUpperCase Methode in einer Assembly mit dem Namen UtilityLib wird angezeigt, um den Code in einer Assembly mit dem Namen Friend2. Im folgenden ist der Quellcode für UtilityLib.dll:

using System;
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleToAttribute("Friend2")]

namespace Utilities.StringUtilities
{
   public class StringLib
   {
      internal static bool IsFirstLetterUpperCase(String s)
      {
         string first = s.Substring(0, 1);
         return first == first.ToUpper();
      }
   }
}

The following example provides the source code for the Friend2 assembly. Note that if you are compiling in C# from the command line, you must use the /out compiler switch to ensure that the name of the friend assembly is available when the compiler binds to external references.

using System;
using Utilities.StringUtilities;

public class Example
{
   public static void Main()
   {
      String s = "The Sign of the Four";
      Console.WriteLine(StringLib.IsFirstLetterUpperCase(s));
   }
}

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: