c# - ما "التهيئة الإضافية" ضروري للإشارة إلى تجميع وضع مختلط.NET 2.0 في مشروع.NET 4.0؟




sqlite .net-4.0 (11)

لدي مشروع أريد فيه استخدام بعض ميزات .NET 4.0 ، لكن المتطلب الأساسي هو أنه يمكنني استخدام إطار System.Data.SQLite الذي تم تجميعه مقابل 2.X. أرى أن هذا ممكن ، مثل الإجابة المقبولة هنا ، لكني لا أرى كيف أحقق ذلك.

عندما أحاول فقط تشغيل مشروع 4.0 الخاص بي أثناء الإشارة إلى التجميع 2.X الذي حصلت عليه:

تم إنشاء تجميع الوضع المختلط ضد الإصدار 'v2.0.50727' من وقت التشغيل ولا يمكن تحميله في وقت التشغيل 4.0 بدون معلومات تهيئة إضافية.

ما "التكوين الإضافي" ضروري؟


أيضا كان لي هذه المسألة مع مكتبة الفئة ، إذا كان أي شخص لديه مشكلة مع مكتبة الفئة المضافة إلى التطبيق الرئيسي الخاص بك. فقط اضف

<startup selegacyv2runtimeactivationpolicy="true">

لك التطبيق الرئيسي الذي سيتم اختياره من قبل مكتبة الصف.


إذا كنت تعمل في خدمة ويب وكان التجميع v2.0 عبارة عن تبعية تم تحميلها بواسطة WcfSvcHost.exe ثم يجب عليك تضمين

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>

في ملف Microsoft Visual Studio 10.0 \ Common7 \ IDE \ WcfSvcHost.exe.config

بهذه الطريقة ، سيتمكن Visual Studio من إرسال المعلومات الصحيحة من خلال المحمل في وقت التشغيل.


استخدام 2.0 و 4.0 التجميعات معاً غير مستقيم للأمام تماماً.

لدى ORDER من تعريفات الإطار المعتمدة في app.config بالفعل تأثير على استثناء وضع مختلطة يتم طرح. إذا كنت تقلب طلب الإعلان ، فسوف تحصل على خطأ في الوضع المختلط. هذا هو الغرض من هذه الإجابة.

لذا إذا تلقيت الخطأ في تطبيق Windows Forms ، فجرّب هذا ، معظمه من تطبيقات Windows Forms.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

أو إذا كان المشروع ليس نموذج Windows. في مشروع ويب إضافة هذا إلى ملف web.config.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

استخدمت هذا التكوين:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0"/>
    <supportedRuntime version="v4.0"/>
</startup>

عملت بالنسبة لي


بمجرد تعيين ملف app.config ، سيقوم الأستوديو المرئي بإنشاء نسخة في المجلد bin المسمى App.exe.config . انسخ هذا إلى دليل التطبيق أثناء النشر. يبدو واضحا ولكن من المستغرب أن يفتقد الكثير من الناس هذه الخطوة. مطوري WinForms لا تستخدم لتكوين ملفات :).


كان قادرا على حل المشكلة عن طريق إضافة عنصر "بدء التشغيل" مع مجموعة "useLegacyV2RuntimeActivationPolicy" .

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

ولكن كان عليها أن تضعه كعنصر أول من علامة التهيئة في App.config حتى يسري مفعوله .

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

لاستخدام تجميع وضع مختلط CLR 2.0 ، تحتاج إلى تعديل ملف App.Config لتشمل:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

المفتاح هو علامة useLegacyV2RuntimeActivationPolicy . يؤدي هذا إلى استخدام CLR الإصدار الأحدث (4.0) لتحميل التجميع وضع مختلط. بدون هذا ، لن ينجح.

لاحظ أن هذا يهم فقط التجميعات وضع مختلط (C ++ / CLI). يمكنك تحميل جميع تجميعات CLR المدارة بدون تحديد ذلك في app.config .


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

يبدو أن حذف ملف licenses.licx المتسبب في المشكلة قد حل المشكلة.


لقد واجهت هذه المشكلة عندما غيرنا إلى Visual Studio 2015 . لا أحد من الإجابات المذكورة أعلاه يعمل لصالحنا. في النهاية حصلنا على العمل عن طريق إضافة ملف التهيئة التالي إلى جميع الملفات التنفيذية sgen.exe على الجهاز

<?xml version ="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" />
        </startup>    
</configuration>

بشكل خاص في هذا الموقع ، حتى عندما كنا نستهدف .NET 4.0:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 أدوات


لقد وجدت طريقة حول هذا بعد 3-4 ساعات من googling. لقد أضفت ما يلي

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

إذا كان هذا لا يحل مشكلتك -> في مراجع المشروع Right Click on DLL Check the Run-time Version Right Click on DLL حيث تحصل على خطأ -> Select Properties -> Check the Run-time Version -> إذا كان v2.0.50727 فإننا نعرف المشكلة. المشكلة هي: - لديك 2.0 Version of respective DLL. الحل هو: - يمكنك delete the respective DLL من مراجع المشروع ، ثم قم download the latest version of DLL's من موقع الويب المقابل وإضافة مرجع أحدث نسخة من DLL المرجعي ثم سيعمل.






system.data.sqlite