الفرق بين تبعيات المشروع و DLL في .NET في التجميع المترجم النهائي

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

سؤال

دعنا نقول أن لدي مشروعان A و B. A يعتمد على B. يمكنني تحديد هذا بطريقتين:

  • قم بتضمين A و B في نفس الحل وحدد B كاعتماد على المشروع لـ A. هذا يظهر في مشروع MSBuild الخاص بـ A كـ "ProjectReference".
  • قم بتضمين إشارة إلى DLL المترجمة من B كاعتماد على A. هذا يظهر في مشروع MSBuild الخاص بـ A كعقدة "مرجعية"

سؤالي هو ، بمجرد أن أقوم ببناء التجميع لـ A ، هل هناك فرق في الإخراج النهائي بين هاتين الطريقتين.

حاولت إنشاء اثنين من المشاريع البسيطة التي تصمم هذه العلاقة وحاولت مقارنة - لكن أدوات المقارنة المختلفة تخبرني بأشياء مختلفة. في انتظار كتابة شيء يقارن هذه الملفات بايت بايت ، كنت أتساءل عما إذا كنت تعرف أي شيء عن هذا. على وجه التحديد ، هل سيكون هناك أي اختلاف في سلوك التجميع المبني إذا استخدمت مرجع DLL بدلاً من مرجع المشروع.

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

المحلول

إذا لم تتغير مصادر المشروع B بين مبنيين من المشروع A ، فلن يكون هناك فرق في سلوك المشروع A. ومع ذلك ، إذا تغيرت مصادر المشروع B ، فإن الرجوع إليها كمشروع من المشروع A سيؤدي إلى إعادة بناء المشروع B أيضًا. هذا الاختلاف هو ما يحدد اختيارك لكيفية الرجوع إلى المشروع ب من المشروع أ:

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

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

نصائح أخرى

إن إضافة مرجع المشروع فقط له ميزة أن التجميع "B" تم تصميمه تلقائيًا إذا لزم الأمر.

بمجرد تصميم التجميع "A" ، لا يوجد فرق.

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