Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 ClassAşağıdaki komutu kullanarak friend_unsigned_A derleyin ve imzalayın:
csc /target:library friend_unsigned_A.csvbc -target:library friend_unsigned_A.vbAş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 ModuleAşağıdaki komutu kullanarak friend_unsigned_B derleyin.
csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.csvbc -r:friend_unsigned_A.dll friend_unsigned_B.vbDerleyici 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.