سؤال

لدي مجموعة من التجميعات المتعددة (يتم استخدام تجميع واحد كواجهة برمجة التطبيقات ويعتمد على التجميعات الأخرى).أرغب في دمج جميع التجميعات في مجموعة واحدة ولكن أمنع جميع التجميعات باستثناء واجهة برمجة التطبيقات (API) من أن تكون مرئية من الخارج.

سأقوم بعد ذلك بتشويش هذا التجميع باستخدام Xenocode.مما رأيته، من المستحيل استيعاب التجميع باستخدام Xenocode.

لقد رأيت ILMerge من Microsoft، ولكن لم أتمكن من معرفة ما إذا كان يمكنه فعل ما أريد.http://research.microsoft.com/~mbarnett/ILMerge.aspx

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

المحلول 2

أعلم أن Xenocode يمكنه دمج التجميعات في مجموعة واحدة ولكني لست متأكدًا مما إذا كان سيستوعب التجميعات غير الأساسية الأخرى.

لقد وجدت رمز التبديل/داخلي في ILMerge الذي "يستوعب" جميع التجميعات باستثناء التجميع الأساسي.مفيدة جدا!

نصائح أخرى

لقد استخدمت ILMerge من Microsoft لاستيعاب ملفات DLL في مكتبة مجمعة واحدة.هناك واجهة مستخدم رسومية مفيدة لاستخدام ILMerge تسمى NuGenUnify.يمكن ان تجدها هنا.

أقترح عليك أن تنظر إلى InternalsVisibleTo السمة على MSDN.

يمكنك وضع علامة على كل شيء في كافة التجميعات (باستثناء تجميع API) على أنه internal بدلاً من public, ، ثم قم بإعادة عرضها لتجميع API الخاص بك فقط.

بعد القيام بذلك، فإن استخدام ILMerge يجب أن يمنحك تجميعًا واحدًا مع فئات واجهة برمجة التطبيقات (API) المرئية فقط.

هناك بعض مشاكل مع ILMerge, ، لكنني أعتقد أنه إذا أضفت تحسينات + دمج + تشويش، فمن المحتمل أن تخلق موقفًا معقدًا للغاية دون فائدة تذكر.

لماذا لا يكون لديك تجميع واحد فقط، وتجعل واجهة برمجة التطبيقات (API) الخاصة بك عامة فقط؟

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

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