Vorgehensweise: Erstellen von nicht signierten Friend-Assemblys (C#)How to: Create Unsigned Friend Assemblies (C#)

Dieses Beispiel zeigt, wie Sie Friend-Assemblys mit unsignierten Assemblys verwenden.This example shows how to use friend assemblies with assemblies that are unsigned.

So erstellen Sie eine Assembly und eine Friend-AssemblyTo create an assembly and a friend assembly

  1. Öffnen Sie eine Eingabeaufforderung.Open a command prompt.

  2. Erstellen Sie eine C#-Datei namens friend_signed_A. mit dem folgenden Code.Create a C# file named friend_signed_A. that contains the following code. Der Code verwendet das Attribut InternalsVisibleToAttribute, um „friend_signed_B“ als Friend-Assembly zu deklarieren.The code uses the InternalsVisibleToAttribute attribute to declare friend_signed_B as a friend assembly.

    // 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.Compile and sign friend_signed_A by using the following command.

    csc /target:library friend_unsigned_A.cs  
    
  4. Erstellen Sie eine C#-Datei namens friend_unsigned_B mit dem folgenden Code.Create a C# file named friend_unsigned_B that contains the following 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.Because friend_unsigned_A specifies friend_unsigned_B as a friend assembly, the code in friend_unsigned_B can access internal types and members from friend_unsigned_A.

    // 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.Compile friend_signed_B by using the following command.

    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.The name of the assembly that is generated by the compiler must match the friend assembly name that is passed to the InternalsVisibleToAttribute attribute. Sie müssen den Namen der Ausgabeassembly (EXE oder DLL) explizit mit der /out-Compileroption angeben.You must explicitly specify the name of the output assembly (.exe or .dll) by using the /out compiler option. Weitere Informationen finden Sie unter /out (C# Compiler Options).For more information, see /out (C# Compiler Options).

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

    Das Programm druckt zwei Zeichenfolgen: „Class1.Test“ und „Class2.Test“.The program prints two strings: "Class1.Test" and "Class2.Test".

.NET Framework-Sicherheit.NET Framework Security

Es gibt Ähnlichkeiten zwischen dem Attribut InternalsVisibleToAttribute und der Klasse StrongNameIdentityPermission.There are similarities between the InternalsVisibleToAttribute attribute and the StrongNameIdentityPermission class. 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.The main difference is that StrongNameIdentityPermission can demand security permissions to run a particular section of code, whereas the InternalsVisibleToAttribute attribute controls the visibility of internal types and members.

Siehe auchSee Also

InternalsVisibleToAttribute
Assemblies and the Global Assembly Cache (C#) (Assemblys und der globale Assemblycache (C#))Assemblies and the Global Assembly Cache (C#)
Friend-Assemblys (c#)Friend Assemblies (C#)
Vorgehensweise: Erstellen von signierten Friend-Assemblys (c#)How to: Create Signed Friend Assemblies (C#)
C#-ProgrammierhandbuchC# Programming Guide