مشاركة عبر


كيفية القيام بما يلي: إنشاء تجميعات صديقة موقعة (C# و Visual Basic)

يوضح هذا المثال كيفية إستخدام التجميعات الصديقة مع التجميعات التي لها أسماء قوية. كلا التجميعات يجب أن تكون تسميتهما قوية. على الرغم من أن كلا التجميعات في هذا المثال لإستخدام المفاتيح نفس يمكنك إستخدام مفاتيح مختلفة للتجميعات اثنين.

لإنشاء تجميع موقع و تجميع صديق في ‏‫Visual Studio

  1. قم بفتح موجه أوامر Visual Studio.

  2. إستخدم التسلسل التالي للأوامر مع اسم قوي أداة لإنشاء keyfile ولعرض مفتاح عام الخاص به. لمزيد من المعلومات، راجع Sn.exe (أداة الاسم القوي).

    1. إنشاء مفتاح اسم مميز على سبيل المثال وتخزينها في ملف FriendAssemblies.snk:

      كيلو sn FriendAssemblies.snk

    2. يفك الضغط مفتاح عام من FriendAssemblies.snk ووضعه في FriendAssemblies.publickey:

      sn FriendAssemblies.publickey FriendAssemblies.snk -p

    3. عرض المفتاح العام المخزن في ملف FriendAssemblies.publickey :

      sn - tp FriendAssemblies.publickey

  3. إنشاء 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();
        }
    }
    
  4. يحول برمجياً ثم يقوم بتسجيل friend_signed_A بإستخدام الأمر التالي.

    Vbc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.vb
    
    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
    
  5. إنشاء 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();
        }
    }
    
  6. يحول برمجياً ثم يقوم بتسجيل 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#).

  7. قم بتشغيل الملف friend_signed_B.exe.

    يطبع البرنامج السلسلة "Class1.Test".

أمان

هناك أوجه التشابه بين السمةInternalsVisibleToAttribute و فئة StrongNameIdentityPermission. الاختلاف الأساسي هو أن StrongNameIdentityPermission يمكنه طلب أذونات الأمان لتشغيل لمقطع محدد من التعليمات البرمجية ، بينما السمة InternalsVisibleToAttribute تتحكم الرؤية Friend (Visual Basic) أو أنواع (C#) و أعضاءinternal .

راجع أيضًا:

المهام

كيفية القيام بما يلي: إنشاء تجميعات صديق غير الموقعة (C# و Visual Basic)

المرجع

التجميعات ومخزن التجميع العمومي المؤقت (C# و Visual Basic)

التجميعات الصديقة (C# و Visual Basic)

InternalsVisibleToAttribute

/keyfile

Sn.exe (أداة الاسم القوي)

المبادئ

إنشاء ثم استخدام التجميعات المسماة قوية

دليل البرمجة لـ #C

موارد أخرى

دليل البرمجة Visual Basic