كيف تمنع بشكل أنيق وكيل خدمة الويب من التعرض لـ COM؟

StackOverflow https://stackoverflow.com/questions/1649752

سؤال

لدي تجميع C# أستخدمه كخادم COM داخلي يستهلكه تطبيق C++ غير مُدار.يستهلك التجميع خدمة ويب لن تتغير أبدًا، لذا ليست هناك حاجة لتحديث فئات وكيل خدمة الويب على الإطلاق.لهذا السبب يتم إنشاء فئات الوكيل مرة واحدة و Reference.cs يتم وضع الملفات ببساطة في المستودع ويتم تجميعها من هناك فقط.

تكمن المشكلة في أن فئات وكيل خدمة الويب تكون عامة بشكل افتراضي وبالتالي فهي مكشوفة لـ COM.يؤدي هذا إلى تضخيم typelib وتلويث التسجيل.يؤدي تغيير الرؤية إلى قطع داخلي إلى قطع التجميع، لذلك تحتاج هذه الكيانات إلى أن تظل عامة، ولكن لا يلزم أن تكون مكشوفة لـ COM.

الطريقة الغبية هي التعامل مع كل واجهة/فئة عامة في ملف Reference.cs الملفات ووضع علامة عليها

[System.Runtime.InteropServices.ComVisible(false)]

بعد ذلك لم يعد يتعرض لـ COM.

هل هناك طريقة أفضل؟

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

المحلول

يمكنك

  • بمناسبة التجمع نفسه حتى لا يكون ComVisible ثم قم بوضع علامة واضحة على جميع الواجهات/الفئات/التعدادات التي تريد الكشف عنها COM مثل ComVisible.
  • استخدم ملفًا ثانيًا وفئة جزئية لتحديد أنواع الوكيل الخاصة بك ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top