Ú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
Nyisson meg egy parancssorablakot.
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).
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
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
A FriendAssemblies.publickey fájlban tárolt nyilvános kulcs megjelenítése:
sn -tp FriendAssemblies.publickey
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
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
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#) vagyFriend
(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
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).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
.