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

Bu örnekte, arkadaş derlemelerinin imzasız derlemelerle nasıl kullanılacağı gösterilmektedir.

Derleme ve arkadaş derlemesi oluşturma

  1. Komut istemi açın.

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

    // 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");
        }
    }
    
    ' friend_unsigned_A.vb
    ' Compile with:
    ' vbc -target:library friend_unsigned_A.vb
    Imports System.Runtime.CompilerServices
    
    <Assembly: InternalsVisibleTo("friend_unsigned_B")>
    
    ' Friend type.
    Friend Class Class1
        Public Sub Test()
            Console.WriteLine("Class1.Test")
        End Sub
    End Class
    
    ' Public type with Friend member.
    Public Class Class2
        Friend Sub Test()
            Console.WriteLine("Class2.Test")
        End Sub
    End Class
    
  3. Aşağıdaki komutu kullanarak friend_unsigned_A derleyin ve imzalayın:

    csc /target:library friend_unsigned_A.cs
    
    vbc -target:library friend_unsigned_A.vb
    
  4. Aşağıdaki kodu içeren friend_unsigned_B adlı bir C# veya Visual Basic dosyası oluşturun. friend_unsigned_A friend_unsigned_B bir arkadaş derlemesi olarak belirttiğinden, friend_unsigned_B içindeki kod friend_unsigned_A 'den (C#) veya Friend (Visual Basic) türlerine ve üyelerine erişebilir internal .

    // 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();
        }
    }
    
    ' friend_unsigned_B.vb
    ' Compile with:
    ' vbc -r:friend_unsigned_A.dll friend_unsigned_B.vb
    Module Module1
        Sub Main()
            ' Access a Friend type.
            Dim inst1 As New Class1()
            inst1.Test()
    
            Dim inst2 As New Class2()
            ' Access a Friend member of a public type.
            inst2.Test()
    
            System.Console.ReadLine()
        End Sub
    End Module
    
  5. Aşağıdaki komutu kullanarak friend_unsigned_B derleyin.

    csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs
    
    vbc -r:friend_unsigned_A.dll friend_unsigned_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)..

  6. friend_unsigned_B.exe dosyasını çalıştırın.

    Program iki dize çıkışı verir: Class1.Test ve Class2.Test.

.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, öznitelik ise InternalsVisibleToAttribute veya Friend (Visual Basic) türlerinin internal ve üyelerinin görünürlüğünü denetler.

Ayrıca bkz.