Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird veranschaulicht, wie Friend-Assemblys mit unsignierten Assemblys verwendet werden.
So erstellen Sie in Visual Studio eine Assembly und eine Friend-Assembly
Öffnen Sie die Visual Studio-Eingabeaufforderung.
Erstellen Sie in Visual Basic oder C# eine Datei mit dem Namen friend_signed_A, die den folgenden Code enthält.Im Code wird friend_signed_B mit dem InternalsVisibleToAttribute-Attribut als Friend-Assembly deklariert.
' friend_unsigned_A.vb ' Compile with: ' Vbc /target:library friend_unsigned_A.vb Imports System.Runtime.CompilerServices Imports System <Assembly: InternalsVisibleTo("friend_unsigned_B")> ' Friend type. Friend Class Class1 Public Sub Test() Console.WriteLine("Class1.Test") End Sub End Class ' Public type with Friend member. Public Class Class2 Friend Sub Test() Console.WriteLine("Class2.Test") End Sub End Class// friend_unsigned_A.cs // Compile with: // csc /target:library friend_unsigned_A.cs using System.Runtime.CompilerServices; using System; [assembly: InternalsVisibleTo("friend_unsigned_B")] // Type is internal by default. class Class1 { public void Test() { Console.WriteLine("Class1.Test"); } } // Public type with internal member. public class Class2 { internal void Test() { Console.WriteLine("Class2.Test"); } }Kompilieren und signieren Sie friend_signed_A mit dem folgenden Befehl.
Vbc /target:library friend_unsigned_A.vbcsc /target:library friend_unsigned_A.csErstellen Sie in Visual Basic oder C# eine Datei mit dem Namen friend_unsigned_B, die den folgenden Code enthält.Da friend_unsigned_B im Code von friend_unsigned_A als Friend-Assembly angegeben wird, kann der Code in friend_unsigned_B auf die als Friend (Visual Basic) bzw. als internal (C#) gekennzeichneten Typen und Member zugreifen.
' friend_unsigned_B.vb ' Compile with: ' Vbc /r:friend_unsigned_A.dll friend_unsigned_B.vb Module Module1 Sub Main() ' Access a Friend type. Dim inst1 As New Class1() inst1.Test() Dim inst2 As New Class2() ' Access a Friend member of a public type. inst2.Test() System.Console.ReadLine() End Sub End Module// friend_unsigned_B.cs // Compile with: // csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs public class Program { static void Main() { // Access an internal type. Class1 inst1 = new Class1(); inst1.Test(); Class2 inst2 = new Class2(); // Access an internal member of a public type. inst2.Test(); System.Console.ReadLine(); } }Kompilieren Sie friend_signed_B mit dem folgenden Befehl.
Vbc /r:friend_unsigned_A.dll friend_unsigned_B.vbcsc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.csDer Name der vom Compiler erstellten Assembly muss mit dem Namen der Friend-Assembly übereinstimmen, der an das InternalsVisibleToAttribute-Attribut übergeben wird.Sie können die Assembly mithilfe der /out-Compileroption explizit festlegen.
In C# müssen Sie den Namen der Ausgabeassembly mit der /out-Compileroption explizit angeben (EXE- oder DLL-Datei).In Visual Basic ist dies optional.Weitere Informationen finden Sie unter /out (Visual Basic) und unter /out (C#-Compileroptionen).
Führen Sie die Datei friend_signed_B.exe aus.
Das Programm druckt zwei Zeichenfolgen: "Class1.Test" und "Class2.Test".
Sicherheit
Das InternalsVisibleToAttribute-Attribut ist mit der StrongNameIdentityPermission-Klasse vergleichbar.Der Hauptunterschied liegt darin, dass von der StrongNameIdentityPermission-Klasse Sicherheitsberechtigungen für die Ausführung einzelner Codeabschnitte angefordert werden können, während das InternalsVisibleToAttribute-Attribut die Sichtbarkeit der als Friend (Visual Basic) bzw. als internal (C#) gekennzeichneten Typen und Member steuert.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von signierten Friend-Assemblys (C# und Visual Basic)
Referenz
Konzepte
Assemblys und der globale Assemblycache (C# und Visual Basic)
Friend-Assemblys (C# und Visual Basic)