Aracılığıyla paylaş


Nasıl yapılır: İmzalı arkadaş derlemeleri oluşturma

Bu örnekte, sağlam adlara sahip derlemelerle arkadaş derlemelerinin nasıl kullanılacağı gösterilmektedir. Her iki derleme de güçlü olarak adlandırılmalıdır. Bu örnekteki her iki derleme de aynı anahtarları kullansa da, iki derleme için farklı anahtarlar kullanabilirsiniz.

İmzalı derleme ve arkadaş derlemesi oluşturma

  1. Komut istemi açın.

  2. Bir keyfile oluşturmak ve ortak anahtarını görüntülemek için Tanımlayıcı Ad aracıyla aşağıdaki komut dizisini kullanın. Daha fazla bilgi için bkz . Sn.exe (Tanımlayıcı Ad aracı).

    1. Bu örnek için bir tanımlayıcı ad anahtarı oluşturun ve bunu FriendAssemblies.snk dosyasında depolayın:

      sn -k FriendAssemblies.snk

    2. Ortak anahtarı FriendAssemblies.snk dosyasını ayıklayıp FriendAssemblies.publickey içine yerleştirin:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. FriendAssemblies.publickey dosyasında depolanan ortak anahtarı görüntüleyin:

      sn -tp FriendAssemblies.publickey

  3. Aşağıdaki kodu içeren friend_signed_A adlı bir C# veya Visual Basic dosyası oluşturun. Kod, friend_signed_B bir arkadaş derlemesi olarak bildirmek için özniteliğini kullanırInternalsVisibleToAttribute.

    Tanımlayıcı Ad aracı her çalıştığında yeni bir ortak anahtar oluşturur. Bu nedenle, aşağıdaki koddaki ortak anahtarı, aşağıdaki örnekte gösterildiği gibi yeni oluşturduğunuz ortak anahtarla değiştirmeniz gerekir.

    // 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. Aşağıdaki komutu kullanarak friend_signed_A derleyin ve imzalayın.

    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs  
    
    Vbc -target:library -keyfile:FriendAssemblies.snk friend_signed_A.vb  
    
  5. Aşağıdaki kodu içeren friend_signed_B adlı bir C# veya Visual Basic dosyası oluşturun. friend_signed_A friend_signed_B bir arkadaş derlemesi olarak belirttiğinden, friend_signed_B içindeki kod friend_signed_A 'den (C#) veya Friend (Visual Basic) türlerine ve üyelerine erişebilir internal . Dosya aşağıdaki kodu içerir.

    // 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. Aşağıdaki komutu kullanarak friend_signed_B derleyin ve imzalayın.

    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  
    

    Derleyici tarafından oluşturulan derlemenin adı, özniteliğine geçirilen arkadaş derleme adıyla InternalsVisibleToAttribute eşleşmelidir. Derleyici seçeneğini kullanarak -out çıkış derlemesinin adını (.exe veya .dll) açıkça belirtmeniz gerekir. Daha fazla bilgi için bkz . OutputAssembly (C# derleyici seçenekleri) veya -out (Visual Basic).

  7. friend_signed_B.exe dosyasını çalıştırın.

    Program Class1.Test dizesini verir.

.NET güvenliği

özniteliği ile StrongNameIdentityPermission sınıfı arasında InternalsVisibleToAttribute benzerlikler vardır. Temel fark, kodun StrongNameIdentityPermission belirli bir bölümünü çalıştırmak için güvenlik izinleri istemesi, özniteliği ise InternalsVisibleToAttribute (C#) veya Friend (Visual Basic) türlerinin internal ve üyelerinin görünürlüğünü denetlemesidir.

Ayrıca bkz.