(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Friend-Assemblys (C# und Visual Basic)

Eine Friend-Assembly ist eine Assembly, die auf die als Friend (Visual Basic) bzw. als internal (C#) gekennzeichneten Typen und Member einer anderen Assembly zugreifen kann. Wenn Sie eine Assembly als Friend-Assembly identifizieren, müssen Sie Typen und Member nicht mehr als öffentlich kennzeichnen, damit andere Assemblys auf sie zugreifen können. Dies ist insbesondere in den folgenden Szenarien nützlich:

  • Bei Komponententests, wenn Testcode in einer eigenen Assembly ausgeführt wird, jedoch Zugriff auf Member der zu testenden Assembly erfordert, die als Friend (Visual Basic) bzw. internal (C#) gekennzeichnet sind.

  • Beim Entwickeln einer Klassenbibliothek, wenn Erweiterungen der Bibliothek in eigenen Assemblys enthalten sind, jedoch Zugriff auf Member in vorhandenen Assemblys erfordern, die als Friend (Visual Basic) bzw. internal (C#) gekennzeichnet sind.

Mithilfe des InternalsVisibleToAttribute-Attributs können Sie eine oder mehrere Friend-Assemblys für eine bestimmte Assembly identifizieren. Im folgenden Beispiel wird das InternalsVisibleToAttribute-Attribut in Assembly A verwendet, und AssemblyB wird als Friend-Assembly angegeben. Auf diese Weise erhält AssemblyB Zugriff auf alle Typen und Member in Assembly A, die als Friend (Visual Basic) bzw. internal (C#) gekennzeichnet sind.

Hinweis Hinweis

Beim Kompilieren einer Assembly (Assembly AssemblyB), die auf die internen Typen oder internen Member einer anderen Assembly (Assembly A) zugreift, müssen Sie mit der /out-Compileroption explizit den Namen der Ausgabedatei (EXE- oder DLL-Datei) angeben. Dies ist notwendig, da der Compiler noch nicht den Namen für die Assembly generiert hat, die er beim Binden an externe Verweise erstellt. Weitere Informationen finden Sie unter /out (C#) und unter /out (Visual Basic).


using System.Runtime.CompilerServices;
using System;

[assembly: InternalsVisibleTo("AssemblyB")]

// The class is internal by default.
class FriendClass
{
    public void Test()
    {
        Console.WriteLine("Sample Class");
    }
}

// Public class that has an internal method.
public class ClassWithFriendMethod
{
    internal void Test()
    {
        Console.WriteLine("Sample Method");
    }

}


Nur explizit als Friend-Assemblys angegebene Assemblys können auf Typen und Member zugreifen, die als Friend (Visual Basic) bzw. als internal (C#) gekennzeichnet sind. Wenn beispielsweise die Assembly B in Assembly A als Friend-Assembly angegeben ist und Assembly C auf Assembly B verweist, hat die Assembly C keinen Zugriff auf die als Friend (Visual Basic) bzw. als internal (C#) gekennzeichneten Typen in Assembly A.

Der Compiler führt für den Namen der Friend-Assembly, der dem InternalsVisibleToAttribute-Attribut übergeben wird, einige grundlegende Validierungen durch. Wenn Assembly A Assembly B als Friend-Assembly deklariert, gelten die folgenden Validierungsregeln:

  • Wenn Assembly A einen starken Namen verwendet, muss auch Assembly B einen starken Namen verwenden. Der Name der Friend-Assembly, der dem Attribut übergeben wird, muss aus dem Assemblynamen und dem öffentlichen Schlüssel des Schlüssels mit starkem Namen bestehen, mit dem Assembly B signiert wird.

    Der Name der Friend-Assembly, der dem InternalsVisibleToAttribute-Attribut übergeben wird, kann nicht der starke Name von Assembly B sein: Geben Sie für die Assembly weder die Version, die Kultur, die Architektur noch das öffentliche Schlüsseltoken an.

  • Wenn Assembly A keinen starken Namen verwendet, sollte der Name der Friend-Assembly nur aus dem Assemblynamen bestehen. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von nicht signierten Friend-Assemblys (C# und Visual Basic).

  • Wenn Assembly B einen starken Namen verwendet, müssen Sie für Assembly B in den Projekteinstellungen oder auf der Befehlszeile mithilfe der /keyfile-Compileroption den Schlüssel mit starkem Namen angeben. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von signierten Friend-Assemblys (C# und Visual Basic).

Auch die StrongNameIdentityPermission-Klasse bietet die Möglichkeit, Typen freizugeben. Es bestehen jedoch folgende Unterschiede:

  • StrongNameIdentityPermission gilt für einen einzelnen Typ, während eine friend-Assembly für die ganze Assembly gilt.

  • Wenn Assembly A Hunderte von Typen enthält, auf die auch Assembly B Zugriff haben soll, müssen Sie jedem dieser Typen das StrongNameIdentityPermission-Element hinzufügen. Wenn Sie jedoch eine Friend-Assembly verwenden, müssen Sie die friend-Beziehung nur einmal deklarieren.

  • Bei Verwendung von StrongNameIdentityPermission müssen die Typen, die Sie freigeben möchten, als öffentlich deklariert werden. Bei Verwendung einer Friend-Assembly werden die freigegebenen Typen als Friend (Visual Basic) bzw. als internal (C#) deklariert.

Informationen zum Zugriff auf die als Friend (Visual Basic) bzw. als internal (C#) gekennzeichneten Typen und Methoden aus einer Moduldatei (eine Datei mit der . netmodule-Erweiterung finden Sie unter /moduleassemblyname (Visual Basic) bzw. unter /moduleassemblyname (C#).

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft