توربينات مع db4objects.db4o.linq.dll يعطي غير قادر على تحميل واحد أو أكثر من استثناء الأنواع المطلوبة

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

سؤال

في تطبيق ASP.NET-MVC الخاص بي، أحاول إعداد التوربينات.
يذهب رمز التهيئة على النحو التالي:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
    }
}

ثم لدي مجموعة من المسجلين مماثلة للواحدة التالية:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, Db4oUserRepository>();
    }
}

إذا حاولت تشغيل، أحصل على الخطأ التالي في مكان ما بعد SetLocatorProvider، ولكن قبل إدخال أي من أساليب التسجيل:

خطأ في الخادم في التطبيق "/".

غير قادر على تحميل واحد أو أكثر من الأنواع المطلوبة. استرداد خاصيةصية LoadereXceptions لمزيد من المعلومات.

الوصف: حدث استثناء غير معالج أثناء تنفيذ طلب الويب الحالي. يرجى مراجعة تتبع المكدس لمزيد من المعلومات حول الخطأ وأين نشأ في التعليمات البرمجية.

تفاصيل الاستثناء: system.reflection.reflectiontypeloadexceptionalception: غير قادر على تحميل واحد أو أكثر من الأنواع المطلوبة. استرداد خاصيةصية LoadereXceptions لمزيد من المعلومات.

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

تتبع المكدس:

    [ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
       System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
       System.Reflection.Assembly.GetTypes() +105
       MvcTurbine.ComponentModel.DefaultAutoRegistrator.AutoRegister(ServiceRegistration serviceRegistration) +338
       MvcTurbine.Web.RotorContext.ProcessAutomaticRegistration(AutoRegistrationList registrationList) +155
       MvcTurbine.Web.RotorContext.AutoRegistrationForContext() +163
       MvcTurbine.Web.RotorContext.Turn() +37
       MvcTurbine.Web.TurbineApplication.ExecuteContext() +43
       MvcTurbine.Web.TurbineApplication.TurnRotor() +65
       MvcTurbine.Web.TurbineApplication.Application_Start(Object sender, EventArgs e) +85

تحديث
ضاقت مكتبة المشكلة إلى db4objects.db4o.linq.dll بمجرد أن تكون لدي هذه المكتبة كمراجع (لا حتى "استخدام"، أضفت للتو إلى المراجع) في إحدى مكتباتي المشار إليها في WebApplication MVC الخاص بي المذكورة أعلاه ysod. جميع مكتبات DB4O الأخرى تعمل على ما يرام.

Mettre à jour.
حاول تبديل وحدة unityservicelocator مع windsosservicelocator و ninjectservicelocator. نفس النتائج بالضبط، لذلك من المرجح أن تنشأ المشكلة في أي من Libs.

oppdatering.
لإعادة إنشاء صفحة الخطأ التي يكفي اتخاذ الخطوات التالية:

  • إنشاء تطبيق MVC جديد (لا يهم النسخة الوالة)
  • تغيير رمز gloabal.asax.cs لاستخدام MVCTurbine وإضافة Libs MVCTurbine اللازمة
    سوف تجد كل شيء لا يزال يعمل كما هو متوقع
  • أضف db4objects.db4o.dll.
    لا يزال كل شيء يعمل
  • أضف db4objects.db4o.linq.dll.
    ysod.

أي أفكار حول أين وكيف تصحيح هذا؟

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

المحلول

من أجل كتابة إجابة مناسبة. أعتقد أنك تحصل على TypeloAdException الناجمة عن الفشل في تحميل التجميع المشار إليه بواسطة db4objects.db4o.linq.

ينظر إليها في ildasm يدل على أنه يتطلب التجميعات التالية التي يتم شحنها مع DB4O (استخدم نفس التجميعات التي جاءت مع db4objects.db4o.linq لتجنب أي عدم تطابق).

تلك الجمعيات هي:

  • mono.cecil.
  • cecil.flowanalysis.

بالنسبة إلى السجل، اعتبارا من اليوم، يتم استخدامها من قبل LinQ To Query Optimizer لتحليل الوصول إلى الخصائص في استعلامات LinQ.

نصائح أخرى

من أجل التوربينات لتسجيل الأنواع الخاصة بك، يجب أن يكون لديك جمعية الاستضافة (db4objects.db4o.linq) وأي تجميعات أخرى قد تشير جمعية الاستضافة.

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

يبدو وكأنه مشكلة في نوع المستهدف الخاص بك. قد تحاول ما يلي:

  1. قم بإزالة جميع تسجيلات الخدمات وجربها واحدا في وقت واحد لتحديد النوع الذي يسبب المشكلة.
  2. تأكد من أنك يمكنك إنشاء إصدار الهدف بنجاح بنفسك.
  3. تحقق من أن النوع المستهدف لا يحتوي على أي تبعيات أخرى لا يتم حسابها في تسجيلات الخدمة الخاصة بك.

سيكون من المفيد رؤية الإعلان والبناء من النوع (الأنواع) المستهدفة.

حاول التبديل إلى حاوية IOC أخرى:

أضف مرجعا إلى mvcturbine.ninject.dll

ثم:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        //ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
        ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator()); 
    }
}

يدعم JEFF، MVC Turbine حاليا فقط MVC 1.0، وأنا بصدد الحصول على دعم MVC 2.0 لكل من .NET 3.5 و .NET 4.0. يرجى المراجعة http://turbineproject.com. للحصول على معلومات عند إصدارها.

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