InvalidProgramException во время инициализации экземпляра установки MvvmCross
Я использую инфраструктуру MvvmCross для доставки кроссплатформенного приложения с использованием Xamarin. Мое приложение Windows Phone работает абсолютно файл под платформой WP8 и завершается ошибкой с внутренней ошибкой под платформой WP7. Я использую один проект Visual Studio (шаблон WP7) для платформ WP7 и WP8.
var setup = new Setup(RootFrame);
setup.Initialize();
А вот подробная трассировка стека:
System.InvalidProgramException was unhandled
Message=InvalidProgramException
StackTrace:
at System.RuntimeType.GetConstructors(BindingFlags bindingAttr)
at Cirrious.CrossCore.IoC.MvxTypeExtensions.<CreatableTypes>b__1(Type t)
at System.Linq.Enumerable.<WhereIterator>d__0`1.MoveNext()
at System.Linq.Enumerable.<WhereIterator>d__0`1.MoveNext()
at Cirrious.CrossCore.Platform.MvxBootstrapRunner.Run(Assembly assembly)
at Cirrious.MvvmCross.Platform.MvxSetup.PerformBootstrapActions()
at Cirrious.MvvmCross.Platform.MvxSetup.InitializeSecondary()
at Cirrious.MvvmCross.Platform.MvxSetup.Initialize()
at MyApp.WP.App..ctor()
at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
at MS.Internal.TypeProxy.<>c__DisplayClass30.<GetCreateObjectDelegate>b__2a()
at MS.Internal.TypeProxy.CreateInstance(UInt32 customTypeId)
at MS.Internal.FrameworkCallbacks.CreateKnownObject(IntPtr nativeRootPeer, UInt32 customTypeId, String initializationString, IntPtr& nativePeer, UInt32 isCreatedByParser)
at MS.Internal.FrameworkCallbacks.CreateUnknownObject(String assemblyName, String typeName, IntPtr nativeRootPeer, String initializationString, UInt32& customTypeId, UInt32& coreTypeId, UInt32& typeFlags, IntPtr& nativePeer)
Есть идеи, как диагностировать и устранить проблему?
1 ответ
Есть идеи, как диагностировать и устранить проблему?
Cirrious.CrossCore.Platform.MvxBootstrapRunner.Run
call просматривает вашу основную сборку и ищет классы начальной загрузки для запуска.
Исключение происходит во время этой развертки.
Вы должны быть в состоянии получить немного больше информации об исключении, включив "разбить исключения" для InvalidProgramException
В противном случае вы также можете вызвать исключение в своем собственном коде, используя измененный CreatableTypes
звоните - т.е. в вашем Setup
переопределение кода PerformBootstrapActions
и попробуйте позвонить:
var things = MyCreatableTypes(this.GetType().Assembly).ToList();
с:
public IEnumerable<Type> MyCreatableTypes(Assembly assembly)
{
return assembly
.ExceptionSafeGetTypes()
.Where(t => !t.IsAbstract)
.Where(t => {
try
{
Mvx.Trace("About to call GetConstructors for Type {0}", t.Name);
return t.GetConstructors(BindingFlags.Instance | BindingFlags.Public).Any()
}
catch (InvalidProgramException e)
{
// your trace or debugging code...
return false;
});
}
Надеюсь, это поможет вам диагностировать неисправность... и, возможно, исправление будет исправлено.
Обратите внимание: обратите внимание, что версия 3.1 MvvmCross (и более поздние версии) не будет поддерживать WP7, поскольку Microsoft только лицензировала более новые библиотеки PCL для кросс-платформенного использования - см. http://slodge.blogspot.co.uk/2013/07/mvvmcross-wp7-tombstoned.html. v3.0.14 - последняя официальная поддержка MvvmCross для WP7