C #: Regasm إدخالات التسجيل توليد لكل فئة في DLL COM الخاص بي؟

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

سؤال

وأنا أكتب فئة مكتبة (IE BHO) في C # و الجدل حاليا مع حجم كبير من ما اعتقد هو الانتاج غير المرغوب فيه القادمة من مفاتيح التسجيل ولدت REGASM ل.

والنص القصير هو: أريد فقط لفضح حفنة من الطبقات (حاليا: فئة واحدة) إلى IE (وبقية COM). فئة واحدة فقط لديها ClassInterfaceAttribute وGUID مجموعة الاشياء، ويمكنني اختبار أن الوظيفة الإضافية يتطلب سوى مفاتيح التسجيل COM لهذه الفئة - وبعد، REGASM يولد المعرفات الفريدة العمومية ومفاتيح التسجيل لكل فئة في المشروع بأكمله

وهذا أمر مزعج ومقلق بعض الشيء وأنا لا أريد أسماء صفي يجلس في التسجيل المستخدمين إلا إذا كانوا على الاطلاق <م> هل لديك أن تكون هناك.

لنكون منصفين، فإن العديد من تلك الطبقات الأخرى وتتميز العام لأنني استخدامها في التطبيق سائق من مشروع آخر في نفس الحل، كمحاولة للتغلب على ثقب أسود التصحيح IE في ...

وأنا لا تزال خضراء جدا لCOM بصفة عامة (وخاصة المتعلقة صافي) وأنا أتساءل ما هو أفضل وسيلة لإخفاء كل ما عندي من الطبقات الأخرى من regasm؟ أو، على الأقل، لماذا هذه الفئات التي - على الرغم من أنها يتم وضع علامة الجمهور - تظهر حتى عندما لم تقم بضبط أي من أعلام COM لهم

وشكرا!

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

المحلول

استخدم internal معدل وصول الاشياء التي لا تحتاج إلى أن يكون public التعديل. للأشياء التي تحتاج حقا استخدام الوصول public السمة ComVisible لإخفاء جزئيا ذلك.

وعلى سبيل المثال:

[ComVisible(false)]
public class ClassToHide {
    //whatever
};

public class ClassToExpose {

     public void MethodToExpose() {}

     [ComVisible(false)]
     public void MethodToHide() {}
};

وجميع وظائف العضو العام والمتغيرات عضو من جميع الطبقات العامة هي COM مرئية افتراضيا. أعتقد ذلك أول من جعلها الداخلية وإذا كنت حقا في حاجة إليها اخفاء العام لهم من COM مع ComVisible.

نصائح أخرى

وحاول استخدام regfile التبديل / - هذه الإرادة إخراج ملف ريج بدلا من الكتابة مباشرة عن أسماء صفك إلى التسجيل

وعندما يكون لديك ملف ريج يمكنك إزالة أي إدخالات كنت لا ترغب في أن تضاف إلى التسجيل الأنظمة المستهدفة، ونشر تلك القيم فقط إلى الجهاز المستهدف. اعتمادا على كيفية اختيار لنشر البرمجيات الخاصة بك، وهذا قد يكون من الأسهل وأنك لن تضطر لتغيير رمز لأي من أنواع بك.

في الواقع إذا لم يكن لديك الوصول إلى المصدرية، وهذا من شأنه أن يكون السبيل الوحيد لتحقيق ذلك.

وكتبت مكون COM مع نفس المشاكل.

وأنا فصل جميع وظائف غير COM-إلى DLL المساعد منفصل. يحتوي على DLL COM فقط رمز التي تحتاج إلى أن تكون مسجلة. يتم الوصول إلى كل شيء آخر من خلال DLL المساعد.

ولقد وجدت أن وسيلة سهلة للتأكد من أن شفرة المستقبل لن بطريق الخطأ أن يتم وضع علامة public بدلا من internal وتظهر في التسجيل.

وتعيين السمة ComVisible إلى false في ملف AssemblyInfo وتعيين تطبيق ComVisible للطبقات المطلوب فقط.

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