MvvmCross - 在启用链接所有程序集的情况下缺少视图模型参数

Posted

技术标签:

【中文标题】MvvmCross - 在启用链接所有程序集的情况下缺少视图模型参数【英文标题】:MvvmCross - missing viewmodels parameters with Link all assemblies enabled 【发布时间】:2015-11-11 02:40:52 【问题描述】:

为了减小应用大小,我在 Xamarin.ios 应用上启用了“链接所有程序集”选项。不幸的是,当我启动应用程序时,传递简单的视图模型参数不起作用。在应用程序输出中,我可以看到以下警告:

mvx:Diagnostic: 1.93 Missing parameter for call to ViewModel - missing parameter isLaunchedForTheFirstTime - assuming null - this may fail for value types! <br><br>mvx:Error: 1.94 Failed to parse BoolParser parameter isLaunchedForTheFirstTime from string

我不知道要添加什么到 LinkerPleaseInclude.cs 以使其工作。有什么想法吗?

提前致谢!

编辑: 这是我的 preserve.xml 文件,其中包含所有引用的程序集:http://pastebin.com/cEmLDxqn

还有我的视图模型导航:

ShowViewModel<FirstViewModel>(new isLaunchedForTheFirstTime = true)

[ImplementPropertyChanged]
public class FirstViewModel : MvxViewModel

    //properties
    public void Init(bool isLaunchedForTheFirstTime)
    
        //handling parameter
    

【问题讨论】:

【参考方案1】:

链接器并非总是足够聪明,可以检测到项目运行所需的一切,尤其是在您使用 DI 或反射时。在这些情况下,您可以configure 它以包含它可能遗漏的程序集/类型或方法。

【讨论】:

你是对的。我对此很清楚。但问题是哪种类型负责传递 viewmodel 的参数... 我自己没有使用 mvvmcross 的经验,但是您是否尝试过添加 mvvmcross 程序集以及您的视图模型类型及其所有依赖项?如果这有效,然后慢慢缩小范围,直到它再次破裂。我以前遇到过这样的问题,我解决它的唯一方法是反复试验。不幸的是,没有快速的方法,但也许有人可以进来给我们一些想法。 我试过没有运气。即使我包含所有引用的程序集,传递参数仍然存在问题。我从我的项目中添加了 preserve.xml 文件 isLaunchedForTheFirstTime 是您的变量吗?我可以看看你的 ViewModel 类是什么样子的吗? 不要使用匿名类型,而是尝试将其设为强类型,看看是否可行。如果第一次不起作用,请尝试将 Preserve 添加到类型中。

以上是关于MvvmCross - 在启用链接所有程序集的情况下缺少视图模型参数的主要内容,如果未能解决你的问题,请参考以下文章

MvvmCross 和 Android 上的链接问题

MvvmCross Core 程序集中的设置?

将 Xamarin.UITest 与 MvvmCross 绑定一起使用

MvvmCross 6 中的子类 UIWindow

MvvmCross 升级到 8.x 后,应用程序卡在 SplashScreen

如何在 iOS 中使用没有故事板的 MvvmCross?