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
Komut istemi açın.
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
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
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şebilirinternal
.// 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
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)..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.