为了账号安全,请及时绑定邮箱和手机立即绑定

Xamarin.Forms UWP 应用程序在运行时使用 .net 本机工具链失败,但可以正常工作

Xamarin.Forms UWP 应用程序在运行时使用 .net 本机工具链失败,但可以正常工作

C#
慕后森 2022-12-31 11:22:15
我有一个 Xamarin.Forms UWP 应用程序(Xamarin.Forms v3.4.0.1008975,UWP 目标/最小版本 16299,VS 2017 15.9.11)。在没有 .net 本机工具链的情况下编译时,它可以正确构建和运行。当使用 .net 本机工具链编译时,它构建良好但在运行时失败。这是一个问题,因为我无法将应用程序发布到 Windows 应用商店。此应用程序之前(约 10 个月前)已发布到商店并正常运行。从那时起,随着 XF、Prism、sqlite 包的更新版本以及在许多其他更改中添加了几个其他包,进行了广泛的检修,因此几乎不可能找出可能导致它的更改。我设法解决了 Rg.Plugins.Popup 和 Xam.Plugin.Iconize.FontAwesome 包的一些初始问题,方法是获取它们的程序集列表并将它们传递到Xamarin.Forms.Forms.Init(e, assemblies);UWP 项目的 App.xaml.cs 中。这修复了我的应用程序中弹出窗口和字体图标的崩溃/显示问题。当应用程序启动时,我看到有几个处理了表单FileNotFoundException的Xamarin.Forms.Forms.Init(...)调用Cannot load assembly 'clrcompression'. No metadata found for this assembly.。缺少的程序集是:压缩e_sqlite3libEGLlibGLESv2libSkiaSharpSkiaSharp.Views.Interop.UWPsqlite3如前所述,这些错误已被处理并且仅在调试时可见。我没有看到任何明确的证据表明这些错误是一个问题,因为该应用程序确实从 Sqlite 中读取了一些数据而没有错误,而且我看到使用 SkiaSharp 正确绘制的图像。但是,当我执行导致应用程序崩溃的某些操作时,我会收到其他运行时错误。例如Unhandled exception at 0x05F8F74C (SharedLibrary.dll) in MyApp.UWP.exe: 0x00001007. occurred。如果我查看线程窗口,我会得到更多信息:不幸的是,虽然这告诉我问题发生在哪里,但它并没有给我任何关于它为什么发生以及我如何解决它的线索。在这种情况下,它似乎无法在视图模型上设置属性,但即使在代码中达到这一点,它也必须在其他地方成功完成。我想我真的在寻找有关如何调查此问题/获取更多信息的指导,因为如果没有一些源代码(我无法真正提供),将很难解决特定问题。我曾尝试在关闭优化的情况下进行调试,这通常是建议的,但它没有提供比我在此处发布的更多的信息。我还担心,即使我找出为什么会发生此特定异常并修复它,应用程序中也可能存在更多仅在使用 .net 本机工具链时才会出现的问题。有什么工具可以帮助我解决这个问题吗?
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

所以这原来是 Prism (7.0.0.396) 和 .net 本机的问题。当使用 .net 本机工具链编译时,它看起来像使用失败的可空类型(int?在本例中)绑定属性。BindableBase.SetProperty以下似乎可以解决此问题:


public class BindableBaseWithFix : BindableBase

{

    protected virtual bool SetProperty<T>(ref T? storage, T? value, [CallerMemberName] string propertyName = null)

        where T : struct

    {

        if (EqualityComparer<T?>.Default.Equals(storage, value))

            return false;

        storage = value;

        RaisePropertyChanged(propertyName);

        return true;

    }


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信