Vorgehensweise: Erstellen von nicht signierten Friend-Assemblys (C#)

Dieses Beispiel zeigt, wie Sie Friend-Assemblys mit unsignierten Assemblys verwenden.

So erstellen Sie eine Assembly und eine Friend-Assembly

  1. Öffnen Sie eine Eingabeaufforderung.

  2. Erstellen Sie eine C#-Datei namens friend_signed_A. mit dem folgenden Code. Der Code verwendet das Attribut InternalsVisibleToAttribute, um friend_signed_B als Friend-Assembly zu deklarieren.

    // 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");  
        }  
    }  
    
  3. Kompilieren und signieren Sie friend_signed_A mithilfe des folgenden Befehls.

    csc /target:library friend_unsigned_A.cs  
    
  4. Erstellen Sie eine C#-Datei namens friend_unsigned_B mit dem folgenden Code. Da friend_unsigned_A friend_unsigned_B als Friend-Assembly angibt, kann der Code in friend_unsigned_B auf internal-Typen und -Member aus friend_unsigned_A zugreifen.

    // 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();  
        }  
    }  
    
  5. Kompilieren Sie friend_signed_B, indem Sie den folgenden Befehl verwenden.

    csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs  
    

    Der Name der vom Compiler generierten Assembly muss mit dem Namen der Friend-Assembly übereinstimmen, die an das Attribut InternalsVisibleToAttribute übergeben wird. Sie müssen den Namen der Ausgabeassembly (.exe oder .dll) explizit mit der /out-Compileroption angeben. Weitere Informationen finden Sie unter /out (C# Compiler Options).

  6. Führen Sie die Datei „friend_signed_B.exe“ aus.

    Das Programm druckt zwei Zeichenfolgen: „Class1.Test“ und „Class2.Test“.

.NET Framework-Sicherheit

Es gibt Ähnlichkeiten zwischen dem Attribut InternalsVisibleToAttribute und der Klasse StrongNameIdentityPermission. Der Hauptunterschied besteht darin, dass StrongNameIdentityPermission Sicherheitsberechtigungen verlangen kann, um einen bestimmten Codeabschnitt auszuführen, während das Attribut InternalsVisibleToAttribute die Sichtbarkeit der internal-Typen und -Member steuert.

Siehe auch

InternalsVisibleToAttribute
Assemblys und der globale Assemblycache (C#)
Friend-Assemblys (C#)
Vorgehensweise: Erstellen von signierten Friend-Assemblys (C#)
C#-Programmierhandbuch