Aracılığıyla paylaş


Nasıl yapılır: İmzalı Arkadaş Derlemeleri Oluşturma (C# ve Visual Basic)

Bu örnek, güçlü adlara sahip Derlemelerle arkadaş kullanabileceksiniz gösterilmiştir.Her iki derleme kesin adlı gerekir.Bu örnekte her iki derleme aynı tuşlarını kullanıyor olsa da, iki derlemeler için farklı anahtarlar kullanabilirsiniz.

Visual Studio ile imzalanmış bir derleme ve arkadaş derlemesi oluşturmak için

  1. Visual Studio Komut istemini açın.

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

    1. Bu örnek için kesin ad anahtar oluşturmak ve FriendAssemblies.snk dosyasında saklar:

      sn -k FriendAssemblies.snk

    2. FriendAssemblies.snk ortak anahtar ayıklamak ve FriendAssemblies.publickey yerleştirin:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. FriendAssemblies.publickey dosyasında depolanan ortak anahtarla görüntüle:

      sn - tp FriendAssemblies.publickey

  3. Adlı bir Visual Basic ya da C# dosyası oluşturmak friend_signed_A , aşağıdaki kod içerir.Kod kullanan InternalsVisibleToAttribute friend_signed_B Arkadaş derlemesi olarak bildirmek için öznitelik.

    Çalıştırılan her zaman güçlü adı araç yeni bir ortak anahtar oluşturur.Bu nedenle, aşağıdaki örnekte gösterildiği gibi yalnızca üretilen, ortak anahtar ile ortak anahtarı aşağıdaki kodda değiştirmelisiniz.

    ' 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
    
    // 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();
        }
    }
    
  4. Derlemek ve friend_signed_A, aşağıdaki komutu kullanarak oturum açın.

    Vbc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.vb
    
    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
    
  5. Adlı bir Visual Basic ya da C# dosyası oluşturmak friend_signed_B ve aşağıdaki kodu içerir.Friend_signed_A friend_signed_B Arkadaş derlemesi belirlendiğinden, friend_signed_B kodda erişebilirsiniz Friend (Visual Basic) veya internal (C#) türleri ve friend_signed_A üyelerinden.Aşağıdaki kod dosyası içerir.

    ' 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
    
    // 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();
        }
    }
    
  6. Derlemek ve friend_signed_B, aşağıdaki komutu kullanarak oturum açın.

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

    Derleyici tarafından oluşturulan derlemenin adı geçirilen Arkadaş derlemesi adıyla eşleşmesi gerekir InternalsVisibleToAttribute özniteliği.Kullanarak derleme açıkça ayarlanmış /out derleyici seçeneği.

    C# [NULL]'ta, açıkça çıktı derleme (.exe veya .dll) adını kullanarak belirtmelisiniz /out derleyici seçeneği.Visual Basic'te, bu isteğe bağlıdır.Daha fazla bilgi için, bkz. /out (Visual Basic) ve /out (C# Derleyici Seçenekleri).

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

    Program, "Class1.Test" dizesi yazdırır.

Güvenlik

Arasında benzerlikler vardır InternalsVisibleToAttribute özniteliği ve StrongNameIdentityPermission sınıfı.Temel fark olan StrongNameIdentityPermission kodu, belirli bir bölümünü çalıştırmak için güvenlik izinleri ise talep InternalsVisibleToAttribute özniteliği görünürlüğünü kontrol Friend (Visual Basic) veya internal (C#) türleri ve üyeleri.

Ayrıca bkz.

Görevler

Nasıl yapılır: İmzasız Arkadaş Derlemeleri Oluşturma (C# ve Visual Basic)

Başvuru

InternalsVisibleToAttribute

/keyfile

Sn.exe (Tanımlayıcı Ad Aracı)

Kavramlar

Derlemeler ve Genel Derleme Önbelleği (C# ve Visual Basic)

Arkadaş Derlemeler (C# ve Visual Basic)

C# Programlama Kılavuzu

Diğer Kaynaklar

Tanımlayıcı Adlı Derlemeler Oluşturma ve Kullanma

Visual Basic Programlama Kılavuzu