Nasıl yapılır: imzasız arkadaş derlemeler (C# ve Visual Basic) oluşturma
Bu örnek, imzasız montajları ile arkadaş kullanabileceksiniz gösterilmiştir.
Visual Studio derleme ve arkadaş derleme oluşturmak için
Visual Studio Komut istemini açın.
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.
' friend_unsigned_A.vb ' Compile with: ' Vbc /target:library friend_unsigned_A.vb Imports System.Runtime.CompilerServices Imports System <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
// 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"); } }
Derlemek ve friend_signed_A, aşağıdaki komutu kullanarak oturum açın.
Vbc /target:library friend_unsigned_A.vb
csc /target:library friend_unsigned_A.cs
Adlı bir Visual Basic ya da C# dosyası oluşturmak friend_unsigned_B , aşağıdaki kod içerir.Friend_unsigned_A friend_unsigned_B Arkadaş derlemesi belirlendiğinden, friend_unsigned_B kodda erişebilirsiniz Friend (Visual Basic) veya internal (C#) türleri ve friend_unsigned_A üyelerinden.
' 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
// 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_signed_B, aşağıdaki komutu kullanarak derleyin.
Vbc /r:friend_unsigned_A.dll friend_unsigned_B.vb
csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs
Derleyici tarafından oluşturulan derlemenin adı için geçirilen arkadaş derleme adı eşleşmelidir 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).
Friend_signed_B.exe dosyasını çalıştırın.
Program iki dizeleri yazdırır: "Class1.Test" ve "Class2.Test".
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: imzalı arkadaş derlemeler (C# ve Visual Basic) oluşturma
Başvuru
Kavramlar
Derlemeler ve genel birleştirme önbelleğine (C# ve Visual Basic)
Arkadaş derlemeler (C# ve Visual Basic)