سؤال

أقوم ببناء أداة في التعليمات البرمجية المدارة (معظمها C ++ / CLI) في نسختين، إصدار "مستخدم طبيعي" وإصدار "Pro".

لقد تسببت في حقيقة أن التعليمات البرمجية الأساسية متطابقة بين الإصدارين لي مشكلة صغيرة حيث أريد أن حزمة الأداة الناتجة كجهاز واحد (DLL) ولا أريد أن أضطر إلى تضمين ملفات .cpp للمشتركة رمز في مشاريع الإصدارين من الأدوات. أفضل أن يكون لديك مشروع للتعليم المشترك ومشروع لكل إصدار من الأداة ولديه كل إصدار من مشروع الأدوات يعتمد على التعليمات البرمجية الشائعة وربطه حسب الرغبة.

في C ++ غير المدارة، سأفعل ذلك عن طريق وضع الرمز الشائع في مكتبة ثابتة وربط كلا الإصدارين من الأداة إليه. لا يبدو أنني قادر على الحصول على هذا للعمل في C ++ / CLI. يبدو أنني أجبرت على بناء التعليمات البرمجية المشتركة في مجموعة DLL والتي تؤدي إلى مزيد من DLL من أرغب في ذلك.

لذلك، باختصار، لا أستطيع تحديد كيفية بناء التعليمات البرمجية المشتركة في مشروع واحد وربطها بكل من مشاريع المنتجات النهائية لإنتاج تجمعات DLL واحدة تتضمن كلاهما الكود المشترك.

ربما أفعل شيئا خاطئا، لكنني حاولت أن أعمل كيفية القيام بذلك باستخدام NetModules وأي شيء ولم أتمكن من الحصول عليها للعمل. في النهاية الطريقة الوحيدة التي حصلت عليها، كانت تعمل هي إخبار الرابط بربط منتجات البناء من جمعية الشفرة العامة بدلا من النتائج التي تعمل ولكنها قليلا من الاختراق IMHO.

على أي حال، هل لدى أي شخص أي اقتراحات لكيفية حل هذه المشكلة؟

تحرير: أعتقد أنني يجب أن أذكر حقيقة أن التجميعات التي تم إنشاؤها ليست شفرة مدارة بنسبة 100٪، وهي تحتوي على مزيج من التعليمات البرمجية المدارة وغير المدارة كما هو، ربما شائع جدا مع التجميعات المنتجة مع C ++ / CLI ...

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

المحلول

إذا كنت منزعجا من جميع DLLs، Download ilmerge.. وبعد يمكنني استخدام هذا لحزمة DLL متعددة معا في سهلة الاستخدام لعملائي.

نصائح أخرى

كما قال Ilmerge طريقة واحدة، شخصيا إذا كان لديك القبض على الكثير من exe مع الكثير من dll أنا صالح Netz..

يمكنك استخدام وحدات. وبعد يمكنك ربطها في تجميع باستخدام رابط التجميع، al.exe.

إذا فهمت هذا بشكل صحيح، لديك حل يحتوي على مشروعين. مشروع واحد للمستخدم "العادي" ومشروع واحد لمستخدم "الموالية". يسمح لك Visual Studio بإضافة "رابط" إلى مصدر ملف آخر من مشروع آخر. إذا كان إصدار "Pro" الخاص بك يحتوي على ملف التعليمات البرمجية الأساسية الحقيقية، وفي الإصدار الخاص بك "العادي"، تضيف الموجود -> ابحث عن الملف في مشروع "Pro"، وانقر فوق السهم لأسفل عن طريق الزر "إضافة" وحدد "إضافة كعلامة ". الآن لديك ملف واحد هو نفسه حرفيا بين مشروعين.

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

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

remotesoft السمندر سوف ربطك. انها أساسا مترجم أصلي ورابط.

عند استخدام Mono (أو Cygwin هو خيار) mkbundle. قد يكون أيضا اختيار صالح.

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