هل من الممكن تحميل نسختين من وقت تشغيل .NET في نفس العملية؟

هناك نوعان من السيناريوهات التي أحتاج إلى توضيحها:

  1. يحتاج الملف التنفيذي الذي تم تحويله مع .NET 3.5 إلى استخدام مكتبة مجمّعة مع .NET 1.1 ويجب تشغيل المكتبة في وقت التشغيل 1.1.

  2. يحتاج الملف التنفيذي الذي تم تجميعه مع .NET 1.1 إلى استخدام مكتبة مجمعة مع .NET 3.5.

لا يمكنني العثور على مصدر موثوق به يفيد بأنه من غير الممكن تحميل نسختين من وقت تشغيل .NET وأن وثائق Microsoft غامضة جدًا في هذا الشأن.

5

3 إجابة

No -- you can't load the CLR into the same process twice. See the documentation for CLR Hosting

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

7
وأضاف
يمكنك إذا كنت تستخدم واجهة برمجة تطبيقات استضافة .Net 4.0 بدلاً من واجهة برمجة تطبيقات استضافة .Net 2.0 ...
وأضاف المؤلف Len Holgate, مصدر

يعد .NET 4 بتمكين استضافة إصدارات CLR مختلفة في نفس العملية عن طريق قيد التشغيل جنبًا إلى جنب .

3
وأضاف

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

بالنسبة للحالة رقم 2 ، هل من الممكن إعادة ترجمة التطبيق 1.1 تحت 2.0/3.5 ، بحيث يمكن أن يقيم في نفس العملية؟

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

2
وأضاف
جون ، أنت على حق ، سيكون علينا أن نعمل على حلها لأن تغيير الرمز غير مرغوب فيه. أردت فقط أن أتأكد من أننا لم نتطرق إلى حل أبسط.
وأضاف المؤلف CodeForNothing, مصدر