سؤال

لدي التجمع، وهذا يعتمد (ثابت) على نوع T (نوع المرجع، فئة) في التجمع B.

أنا لا أملك التجمع، لكنني أقوم بالتجمع الخاص ب. لسوء الحظ هو نوع حقيقي (وليس واجهة) ولكن لحسن الحظ يستخدم التأمل في اكتشاف أعضائها.

أريد أن أكون قادرا على إنشاء B (و T) ديناميكيا. العنصر الوحيد الهام هو أنني بحاجة إلى أن أكون متأكدا من أن "B و T" التي تم إنشاؤها ديناميكيا (وليس أعضائها) هي "مكافئة" ثو تلك التي تم تجميعها قانونيا عند تجميعها.

  1. يمكنني استخدام انعكاس ينبعث من إنشاء B و T. لا مشكلة.
  2. أستطيع أن أكتب b.dll إلى القرص
  3. إذا تم تجميعه ضد هذا b.dll، فعندئذ يمكن أن أغير دين ديناميكيا، لا مشكلة
  4. ومع ذلك، إذا تم تجميعه مقابل ما يعادله (مكتوب يدي B و T)، فسيكون لدى T "في A" نفس اسم التجميع والاسم ولكن لن يعتبر مساويا للمحدثين ديناميكيا.

أفترض أن السبب هو خاصية GUID على النوع. عندما أكتب b.dll إلى القرص، فإن نوع T لديه نفس GUID من الشخص الذي يمكنني إنشاؤه ديناميكيا (حتى لو قمت بتغيير أعضائها). ومع ذلك "لا يشارك النوع" نوع مكتوب "على خلاف ذلك" نفس GUID.

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

كيف يحدد وقت التشغيل ما إذا كان نوعان هو نفسه؟ كيف يتم إنشاء هذا GUID؟ يستخدم هذا GUID و / أو شيء آخر؟ هل من الممكن تعيين هذا GUID في مجمعي Dimamic لتتناسب مع واحد في التجمع أ؟

يمكن فحص هذا GUID بشكل شرقي (لم أتمكن من رؤيته مع عاكس أو مقايضة).

ملاحظة: لا يتم توقيع التجميعات.

هل كانت مفيدة؟

المحلول

يستخدم وقت التشغيل .NET اسم التجميع والإصدار والاسم القوي (إذا كان موجودا)، وفي بعض الحالات الثقافة لتحديد موقع الجمعيات المشار إليها. إذا كانت التجميع إشارة إلى مجموعة أخرى ب من الممكن استبدال B مع مجموعة أخرى إذا كانت الخصائص المذكورة هي نفسها بالضبط. إذا كان B يحتوي على اسم قوي، فيمكنك فقط إنشاء مجموعة أخرى بنفس الاسم القوي إذا كنت تملك الملف الرئيسي الذي تم استخدامه لتوقيع التجميع.

AFAIK، يتم استخدام خاصية Type.guid فقط عند تسجيل الأنواع الخاصة بك لاستخدام COM. وهو يعمل مع فئة Guidattribute. وبالتالي، فإن Type.guid لا علاقة له ب "هوية" من النوع.

يمكنك قراءة المزيد حول كيفية تحديد موقع وقت التشغيل التجميعات هنا: http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top