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 <xref:System.Runtime.CompilerServices.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 <xref:System.Runtime.CompilerServices.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 <xref:System.Runtime.CompilerServices.InternalsVisibleToAttribute> und der Klasse <xref:System.Security.Permissions.StrongNameIdentityPermission>. Der Hauptunterschied besteht darin, dass <xref:System.Security.Permissions.StrongNameIdentityPermission> Sicherheitsberechtigungen verlangen kann, um einen bestimmten Codeabschnitt auszuführen, während das Attribut <xref:System.Runtime.CompilerServices.InternalsVisibleToAttribute> die Sichtbarkeit der internal-Typen und -Member steuert.

Siehe auch

<xref:System.Runtime.CompilerServices.InternalsVisibleToAttribute>
Assemblys und der globale Assemblycache (C#)
Friend-Assemblys (C#)
Vorgehensweise: Erstellen von signierten Friend-Assemblys (C#)
C#-Programmierhandbuch