Nasıl yapılır: İmzalı arkadaş derlemeleri oluşturma
Bu örnekte, sağlam adlara sahip derlemelerle arkadaş derlemelerinin nasıl kullanılacağı gösterilmektedir. Her iki derleme de güçlü olarak adlandırılmalıdır. Bu örnekteki her iki derleme de aynı anahtarları kullansa da, iki derleme için farklı anahtarlar kullanabilirsiniz.
İmzalı derleme ve arkadaş derlemesi oluşturma
Komut istemi açın.
Bir keyfile oluşturmak ve ortak anahtarını görüntülemek için Tanımlayıcı Ad aracıyla aşağıdaki komut dizisini kullanın. Daha fazla bilgi için bkz . Sn.exe (Tanımlayıcı Ad aracı).
Bu örnek için bir tanımlayıcı ad anahtarı oluşturun ve bunu FriendAssemblies.snk dosyasında depolayın:
sn -k FriendAssemblies.snk
Ortak anahtarı FriendAssemblies.snk dosyasını ayıklayıp FriendAssemblies.publickey içine yerleştirin:
sn -p FriendAssemblies.snk FriendAssemblies.publickey
FriendAssemblies.publickey dosyasında depolanan ortak anahtarı görüntüleyin:
sn -tp FriendAssemblies.publickey
Aşağıdaki kodu içeren friend_signed_A adlı bir C# veya Visual Basic dosyası oluşturun. Kod, friend_signed_B bir arkadaş derlemesi olarak bildirmek için özniteliğini kullanırInternalsVisibleToAttribute.
Tanımlayıcı Ad aracı her çalıştığında yeni bir ortak anahtar oluşturur. Bu nedenle, aşağıdaki koddaki ortak anahtarı, aşağıdaki örnekte gösterildiği gibi yeni oluşturduğunuz ortak anahtarla değiştirmeniz gerekir.
// 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(); } }
' 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
Aşağıdaki komutu kullanarak friend_signed_A derleyin ve imzalayın.
csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
Vbc -target:library -keyfile:FriendAssemblies.snk friend_signed_A.vb
Aşağıdaki kodu içeren friend_signed_B adlı bir C# veya Visual Basic dosyası oluşturun. friend_signed_A friend_signed_B bir arkadaş derlemesi olarak belirttiğinden, friend_signed_B içindeki kod friend_signed_A 'den (C#) veya
Friend
(Visual Basic) türlerine ve üyelerine erişebilirinternal
. Dosya aşağıdaki kodu içerir.// 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(); } }
' 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
Aşağıdaki komutu kullanarak friend_signed_B derleyin ve imzalayın.
csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs
vbc -keyfile:FriendAssemblies.snk -r:friend_signed_A.dll friend_signed_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_signed_B.exe dosyasını çalıştırın.
Program Class1.Test dizesini verir.
.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, özniteliği ise InternalsVisibleToAttribute (C#) veya Friend
(Visual Basic) türlerinin internal
ve üyelerinin görünürlüğünü denetlemesidir.
Ayrıca bkz.
- InternalsVisibleToAttribute
- .NET’te bütünleştirilmiş kodlar
- Arkadaş derlemeleri
- Nasıl yapılır: İmzasız arkadaş derlemeleri oluşturma
- KeyFile (C#)
- -keyfile (Visual Basic)
- Sn.exe (Tanımlayıcı Ad aracı)
- Tanımlayıcı adlandırılmış derlemeler oluşturma ve kullanma
- C# programlama kılavuzu
- Programlama kavramları (Visual Basic)