كيفية القيام بما يلي: إنشاء تجميعات صديقة موقعة (C# و Visual Basic)
يوضح هذا المثال كيفية إستخدام التجميعات الصديقة مع التجميعات التي لها أسماء قوية. كلا التجميعات يجب أن تكون تسميتهما قوية. على الرغم من أن كلا التجميعات في هذا المثال لإستخدام المفاتيح نفس يمكنك إستخدام مفاتيح مختلفة للتجميعات اثنين.
لإنشاء تجميع موقع و تجميع صديق في Visual Studio
قم بفتح موجه أوامر Visual Studio.
إستخدم التسلسل التالي للأوامر مع اسم قوي أداة لإنشاء keyfile ولعرض مفتاح عام الخاص به. لمزيد من المعلومات، راجع Sn.exe (أداة الاسم القوي).
إنشاء مفتاح اسم مميز على سبيل المثال وتخزينها في ملف FriendAssemblies.snk:
كيلو sn FriendAssemblies.snk
يفك الضغط مفتاح عام من FriendAssemblies.snk ووضعه في FriendAssemblies.publickey:
sn FriendAssemblies.publickey FriendAssemblies.snk -p
عرض المفتاح العام المخزن في ملف FriendAssemblies.publickey :
sn - tp FriendAssemblies.publickey
إنشاء Visual Basic أو C# ملف باسم friend_signed_A. حيث يحتوي على التعليمات البرمجية التالية. تستخدم التعليمة البرمجية سمة InternalsVisibleToAttribute للتصريح friend_signed_B كالتجميع الصديق.
ينشئ أداة "قوية اسم" المفتاح عمومي جديدة كل مرة يتم فيها تشغيله. ولذلك، يجب استبدال المفتاح العام في التعليمات البرمجية التالية بمفتاح عام يمكنك فقط إنشاء, كما هو موضح في المثال التالي.
' 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
// 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 بإستخدام الأمر التالي.
Vbc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.vb
csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
إنشاء Visual Basic أو C# ملف باسم friend_signed_B و يحتوي على التعليمات البرمجية التالية. لأن تعيّن friend_unsigned_A friend_unsigned_B كـ تجميع صديق التعليمات البرمجية في friend_unsigned_B يمكن الوصول إلى Friend (Visual Basic) أو internal أنواع (C#) و أعضاء من friend_unsigned_A. يحتوي الملف على التعليمات البرمجية التالية.
' 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
// 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 بإستخدام الأمر التالي.
Vbc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll friend_signed_B.vb
csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs
يجب أن يطابق اسم التجميع الذي تم إنشاؤها بواسطة المحول البرمجي اسم التجميع الصديق الذي تم تمريره إلى السمةInternalsVisibleToAttribute. يمكنك تعيين التجميع بشكل صريح بإستخدام خيار المحول البرمجي/out.
في C# ، يجب عليك بشكل واضح تحديد صواب الإخراج التجميع (.exe أو .dll) بإستخدام خيار برنامج التحويل البرمجي /out . هذا اختياري في Visual Basic، . للمزيد من المعلومات، راجع / السحب (Visual Basic) و/out (خيارات المحوّل البرمجي C#).
قم بتشغيل الملف friend_signed_B.exe.
يطبع البرنامج السلسلة "Class1.Test".
أمان
هناك أوجه التشابه بين السمةInternalsVisibleToAttribute و فئة StrongNameIdentityPermission. الاختلاف الأساسي هو أن StrongNameIdentityPermission يمكنه طلب أذونات الأمان لتشغيل لمقطع محدد من التعليمات البرمجية ، بينما السمة InternalsVisibleToAttribute تتحكم الرؤية Friend (Visual Basic) أو أنواع (C#) و أعضاءinternal .
راجع أيضًا:
المهام
كيفية القيام بما يلي: إنشاء تجميعات صديق غير الموقعة (C# و Visual Basic)
المرجع
التجميعات ومخزن التجميع العمومي المؤقت (C# و Visual Basic)
التجميعات الصديقة (C# و Visual Basic)
المبادئ
إنشاء ثم استخدام التجميعات المسماة قوية