Megosztás a következőn keresztül:


Útmutató: Aláírt ismerősi szerelvények létrehozása

Ez a példa bemutatja, hogyan használhat barát szerelvényeket erős névvel rendelkező szerelvényekkel. Mindkét szerelvényeknek erősnek kell lenniük. Bár a példában mindkét szerelvények ugyanazokat a kulcsokat használják, két szerelvényhez különböző kulcsokat használhat.

Aláírt szerelvény és baráti szerelvény létrehozása

  1. Nyisson meg egy parancssorablakot.

  2. A következő parancssorozatot használja az Erős név eszközzel egy kulcsfájl létrehozásához és a nyilvános kulcs megjelenítéséhez. További információ: Sn.exe (Erős név eszköz).

    1. Hozzon létre egy erős nevű kulcsot ehhez a példához, és tárolja a FriendAssemblies.snk fájlban:

      sn -k FriendAssemblies.snk

    2. Bontsa ki a nyilvános kulcsot a FriendAssemblies.snk fájlból, és helyezze a FriendAssemblies.publickey fájlba:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. A FriendAssemblies.publickey fájlban tárolt nyilvános kulcs megjelenítése:

      sn -tp FriendAssemblies.publickey

  3. Hozzon létre egy friend_signed_A nevű C# vagy Visual Basic fájlt, amely az alábbi kódot tartalmazza. A kód az InternalsVisibleToAttribute attribútum használatával deklarálja a friend_signed_B barátösszeállításként.

    Az Erős név eszköz minden futtatáskor létrehoz egy új nyilvános kulcsot. Ezért a következő kódban szereplő nyilvános kulcsot az imént létrehozott nyilvános kulcsra kell cserélnie, ahogyan az az alábbi példában is látható.

    // friend_signed_A.cs  
    // Compile with:
    // csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs  
    using System.Runtime.CompilerServices;  
    
    [assembly: InternalsVisibleTo("friend_signed_B, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3aedce99b7e10823920206f8e46cd5558b4ec7345bd1a5b201ffe71660625dcb8f9a08687d881c8f65a0dcf042f81475d2e88f3e3e273c8311ee40f952db306c02fbfc5d8bc6ee1e924e6ec8fe8c01932e0648a0d3e5695134af3bb7fab370d3012d083fa6b83179dd3d031053f72fc1f7da8459140b0af5afc4d2804deccb6")]  
    class Class1  
    {  
        public void Test()  
        {  
            System.Console.WriteLine("Class1.Test");  
            System.Console.ReadLine();  
        }  
    }  
    
    ' friend_signed_A.vb  
    ' Compile with:
    ' Vbc -target:library -keyfile:FriendAssemblies.snk friend_signed_A.vb  
    Imports System.Runtime.CompilerServices  
    
    <Assembly: InternalsVisibleTo("friend_signed_B, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3aedce99b7e10823920206f8e46cd5558b4ec7345bd1a5b201ffe71660625dcb8f9a08687d881c8f65a0dcf042f81475d2e88f3e3e273c8311ee40f952db306c02fbfc5d8bc6ee1e924e6ec8fe8c01932e0648a0d3e5695134af3bb7fab370d3012d083fa6b83179dd3d031053f72fc1f7da8459140b0af5afc4d2804deccb6")>
    Public Class Class1  
        Public Sub Test()  
            System.Console.WriteLine("Class1.Test")  
            System.Console.ReadLine()  
        End Sub  
    End Class  
    
  4. Fordítás és aláírás friend_signed_A az alábbi paranccsal.

    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs  
    
    Vbc -target:library -keyfile:FriendAssemblies.snk friend_signed_A.vb  
    
  5. Hozzon létre egy friend_signed_B nevű C# vagy Visual Basic fájlt, amely az alábbi kódot tartalmazza. Mivel friend_signed_A barátösszeállításként adja meg a friend_signed_B, a friend_signed_B kódja hozzáférhet internal friend_signed_A (C#) vagy Friend (Visual Basic) típusaihoz és tagjaihoz. A fájl a következő kódot tartalmazza.

    // friend_signed_B.cs  
    // Compile with:
    // csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs  
    public class Program  
    {  
        static void Main()  
        {  
            Class1 inst = new Class1();  
            inst.Test();  
        }  
    }  
    
    ' friend_signed_B.vb  
    ' Compile with:
    ' Vbc -keyfile:FriendAssemblies.snk -r:friend_signed_A.dll friend_signed_B.vb  
    Module Sample  
        Public Sub Main()  
            Dim inst As New Class1  
            inst.Test()  
        End Sub  
    End Module  
    
  6. Fordítás és aláírás friend_signed_B az alábbi paranccsal.

    csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs  
    
    vbc -keyfile:FriendAssemblies.snk -r:friend_signed_A.dll friend_signed_B.vb  
    

    A fordító által létrehozott szerelvény nevének meg kell egyeznie az attribútumnak InternalsVisibleToAttribute átadott barátszerelvény nevével. A fordító beállítással explicit módon meg kell adnia a kimeneti szerelvény nevét (.exe vagy .dll).-out További információ: OutputAssembly (C# fordítóbeállítások) vagy -out (Visual Basic).

  7. Futtassa a friend_signed_B.exe fájlt.

    A program a Class1.Test sztringet adja ki.

.NET-biztonság

Hasonlóságok vannak az attribútum és az InternalsVisibleToAttributeStrongNameIdentityPermission osztály között. A fő különbség az, hogy StrongNameIdentityPermission biztonsági engedélyeket igényelhet a kód egy adott szakaszának futtatásához, míg az InternalsVisibleToAttribute attribútum szabályozza a (C#) vagy Friend a (Visual Basic) típusok és tagok láthatóságát internal .

Lásd még