我已经通过NuGet从版本4.2.0更新到MvvmCross版本4.2.1,现在Android项目在启动时崩溃了。在初始屏幕中抛出MvxException
,并显示以下消息:
MvvmCross.Platform.Exceptions.MvxException:您必须调用EnsureLoaded 在使用DownloadCache
之前的File插件上
我实际上是在MvxAppCompatSetup.InitializeLastChance
覆盖中调用此方法。对于4.2.0版本,这对我来说效果很好,但现在运行版本4.2.1时代码甚至没有达到InitializeLastChance
。
protected override void InitializeLastChance()
{
base.InitializeLastChance();
MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded();
MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded();
}
我无法将EnsureLoaded
来电转移到InitializeFirstChance
,因为我会收到异常,因为插件尚未初始化
无法解析类型MvvmCross.Platform.Plugins.IMvxPluginManager
MvxSetup.InitializePluginFramework
在调用InitializePluginFramework
时似乎抛出此异常。
NuGet显示了我在更新期间安装的每个插件的错误消息:
[失败]无法归档文件' ... \ Project.Droid \ Bootstap \ XXXBootstrap.cs'
文件肯定存在,软件包安装时没有报告错误。
处理此问题的正确方法是什么?
答案 0 :(得分:5)
尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs,只需将手动设置保留在InitializeLastChance()中。加载订单似乎存在问题。
答案 1 :(得分:3)
正如@Piotr所说:
尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs 在InitializeLastChance()中留下手动设置。似乎有一个 加载订单的问题。
这也为我解决了这个问题。
我只是想在iOS项目的Setup.cs中共享我的代码,因为我认为这是一个更好的实现。我没有使用 InitializeLastChance()。相反,我使用 AddPluginsLoaders 和 LoadPlugins 。
protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry)
{
registry.Register<MvvmCross.Plugins.File.PluginLoader, MvvmCross.Plugins.File.iOS.Plugin>();
registry.Register<MvvmCross.Plugins.DownloadCache.PluginLoader, MvvmCross.Plugins.DownloadCache.iOS.Plugin>();
base.AddPluginsLoaders(registry);
}
public override void LoadPlugins(IMvxPluginManager pluginManager)
{
pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.File.PluginLoader>();
pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.DownloadCache.PluginLoader>();
base.LoadPlugins(pluginManager);
}