سؤال

حفظ الأمور بسيطة، افترض أنه لا توجد dlls في المجلد المحلي، أو ملفات التكوين المعنية، أو سياسات الناشر، أو دقة مخصصة. المكان الوحيد المشار إليه DLLs هو في GAC.

كيف تقرر الانصهار أي إصدار من DLLs في GAC للذهاب ل (جميع الأشياء الأخرى متساوية)، ما هو ترتيب الأولوية؟

على سبيل المثال، إذا كنت في مشروعي، فقد أشارت إلى DLL من الإصدار 10.5.0.0. هل ستختار DLL من الإصدار 10.5.0.0 أو 10.5.1.0. بدلا من ذلك، إذا كان لدي الإصدار 10.4.0.0 فقط في GAC، فهل سيعمل أو رمي خطأ؟ هل تتغير هذه القواعد اعتمادا على ما إذا كان الجزء الرئيسي / القاصر / البناء / المراجعة التي تتغير؟

كيف يختلف هذا إذا تم تعيين مرجع المشروع "إصدار محدد" على صواب أو خطأ؟

وكيف يختلف هذا إذا كان المرجع هو مرجع DLL أو مرجع مشروع؟

أنا أظن أن هناك موقع MSDN في مكان ما يذكر كيف يعمل هذا، ولكن لا يمكنني العثور عليه. أنا لا أتطلع إلى تجاوز السلوك، أريد فقط أن أعرف ما هو السلوك الافتراضي.

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

المحلول

تم توثيقها على MSDN في كيفية وقت التشغيل تحديد موقع التجميعات . لا يتم البحث في GAC فقط إذا تم تحميل التجميع باستخدام اسم قوي. قد لا تزال هناك سياسات ناشر قائمة "إعادة توجيه" إلى مجموعة أخرى ولكن لا توجد قواعد أوتوماتيكية في مكانها.

في رأيي، فإن GAC هو فقط شيء يجب استخدامه من قبل Microsoft ل .NET Framework ويمكنك إزالة الكثير من الألم من خلال توزيع التطبيق أو المكتبة دون استخدام GAC (باستثناء .NET Framework بالطبع .NET) .

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

حتى تلخصه: من أجل تحميل .NET لتحميل إصدار آخر من التجميع المطلوب، يجب أن يكون هناك إعادة توجيه التجمع في مكانه. يمكن أن يوفر طلبك إعادة توجيهات في ملف App.config ويمكن أن يكون لدى GAC سياسات الناشر.

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