gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:41:57 34 4
gpt4 key购买 nike

我有一个 Xamarin.Forms UWP 应用程序(Xamarin.Forms v3.4.0.1008975,UWP 目标/最低版本 16299,VS 2017 15.9.11)。在没有 .net native 工具链的情况下编译时,它可以正确构建和运行。使用 .net native 工具链编译时,它构建良好,但在运行时失败。这是一个问题,因为我无法将应用程序发布到 Windows 商店。此应用程序之前(约 10 个月前)已发布到商店并正常运行。从那时起,XF、Prism、sqlite 包的更新版本以及许多其他更改中添加了一些其他包,因此进行了广泛的改革,因此几乎不可能弄清楚是什么变化可能导致了它。

我设法解决了 Rg.Plugins.Popup 和 Xam.Plugin.Iconize.FontAwesome 包的一些初始问题,方法是获取它们的程序集列表并将它们传递给 Xamarin.Forms.Forms.Init(e, assemblies);在 UWP 项目的 App.xaml.cs 中。这修复了我的应用程序中弹出窗口和字体图标的崩溃/显示问题。

当应用程序启动时,我看到几个已处理的 FileNotFoundExceptionXamarin.Forms.Forms.Init(...)表格调用 Cannot load assembly 'clrcompression'. No metadata found for this assembly. .缺少的程序集是:

  • 压缩
  • e_sqlite3
  • libEGL
  • libGLESv2
  • libSkiaSharp
  • SkiaSharp.Views.Interop.UWP
  • sqlite3

  • 如上所述,这些错误会被处理并且只有在调试时才能看到。我没有看到任何明确的证据表明这些错误是一个问题,因为该应用程序肯定会从 Sqlite 读取一些数据而没有错误,而且我看到使用 SkiaSharp 正确绘制了图像。

    但是,当我执行某些导致应用程序崩溃的操作时,我遇到了其他运行时错误。例如 Unhandled exception at 0x05F8F74C (SharedLibrary.dll) in MyApp.UWP.exe: 0x00001007. occurred .如果我查看线程窗口,我会得到更多信息:
    Not Flagged >   13884   0   Worker Thread   <No Name>   
    System.Private.SharedLibrary.Interop.Generated.dll!__Interop.api_ms_win_core_kernel32_legacy_l1_1_0_dll.PInvoke_RaiseFailFastException
    System.Private.SharedLibrary.Interop.Generated.dll!__Interop.api_ms_win_core_kernel32_legacy_l1_1_0_dll.PInvoke_RaiseFailFastException(Interop._EXCEPTION_RECORD* pExceptionRecord, System.IntPtr pContextRecord, uint dwFlags)
    System.Private.CoreLib.dll!Interop.mincore.PInvoke_RaiseFailFastException(Interop._EXCEPTION_RECORD* pExceptionRecord, System.IntPtr pContextRecord, uint dwFlags)
    System.Private.CoreLib.dll!Interop.mincore.RaiseFailFastException(uint faultCode, System.IntPtr pExAddress, System.IntPtr pExContext) Line 122
    System.Private.CoreLib.dll!System.RuntimeExceptionHelpers.FailFast(string message, System.Exception exception, System.RuntimeExceptionHelpers.RhFailFastReason reason, System.IntPtr pExAddress, System.IntPtr pExContext) Line 237
    System.Private.CoreLib.dll!System.RuntimeExceptionHelpers.RuntimeFailFast(System.RuntimeExceptionHelpers.RhFailFastReason reason, System.Exception exception, System.IntPtr pExAddress, System.IntPtr pExContext) Line 200
    [External Code]
    System.Private.CoreLib.dll!Internal.Runtime.Augments.RuntimeAugments.RunFunctionWithConservativelyReportedBufferInternal<Internal.Runtime.TypeLoader.CallConversionParameters>(int cbBuffer, System.IntPtr pfnTargetToInvoke, ref Internal.Runtime.TypeLoader.CallConversionParameters context, ref System.Runtime.RuntimeImports.ConservativelyReportedRegionDesc regionDesc)
    System.Private.CoreLib.dll!Internal.Runtime.Augments.RuntimeAugments.RunFunctionWithConservativelyReportedBuffer<Internal.Runtime.TypeLoader.CallConversionParameters>(int cbBuffer, System.IntPtr pfnTargetToInvoke, ref Internal.Runtime.TypeLoader.CallConversionParameters context)
    System.Private.TypeLoader.dll!Internal.Runtime.TypeLoader.CallConverterThunk.CallConversionThunk(System.IntPtr callerTransitionBlockParam, System.IntPtr callConversionId)
    [External Code]
    Prism.dll!Prism.Mvvm.BindableBase.SetProperty<int?>(ref int? storage, int? value, string propertyName)
    [External Code]
    System.Private.CoreLib.dll!Internal.Runtime.Augments.RuntimeAugments.CallDescrWorker(System.IntPtr callDescr) Line 970
    System.Private.TypeLoader.dll!Internal.Runtime.TypeLoader.CallConverterThunk.InvokeTarget(void* allocatedStackBuffer, ref Internal.Runtime.TypeLoader.CallConversionParameters conversionParams)
    System.Private.CoreLib.dll!Internal.Runtime.Augments.RuntimeAugments.RunFunctionWithConservativelyReportedBufferInternal<Internal.Runtime.TypeLoader.CallConversionParameters>(int cbBuffer, System.IntPtr pfnTargetToInvoke, ref Internal.Runtime.TypeLoader.CallConversionParameters context, ref System.Runtime.RuntimeImports.ConservativelyReportedRegionDesc regionDesc)
    System.Private.CoreLib.dll!Internal.Runtime.Augments.RuntimeAugments.RunFunctionWithConservativelyReportedBuffer<Internal.Runtime.TypeLoader.CallConversionParameters>(int cbBuffer, System.IntPtr pfnTargetToInvoke, ref Internal.Runtime.TypeLoader.CallConversionParameters context)
    System.Private.TypeLoader.dll!Internal.Runtime.TypeLoader.CallConverterThunk.CallConversionThunk(System.IntPtr callerTransitionBlockParam, System.IntPtr callConversionId)
    [External Code]
    MyApp.dll!MyApp.ViewModels.AppLevel.AppStatusViewModel.CurrentSynchroniseJobTasksCount.set(int? value) Line 415
    MyApp.dll!MyApp.ViewModels.AppLevel.AppStatusViewModel.HandleDataSyncStartEvent(string payload) Line 287
    [External Code]
    MyApp.dll!MyApp.Services.Synchronisation.DataSyncCoordinator.DoSynchronisationJob() Line 84
    MyApp.dll!MyApp.Services.Synchronisation.DataSyncCoordinator.AttemptSynchronisationTask(MyApp.Services.Synchronisation.IDatabaseSyncJob job) Line 74
    MyApp.dll!MyApp.Services.Synchronisation.DataSyncService.DeleteLocalData(string dbResetKey) Line 29
    MyApp.dll!MyApp.ViewModels.ClearLocalDataPopupViewModel.Submit() Line 66
    [Resuming Async Method]
    [External Code]

    不幸的是,虽然这告诉我问题发生在哪里,但它并没有给我任何关于它为什么发生以及我如何解决它的线索。在这种情况下,它似乎无法在 View 模型上设置属性,但即使在代码中达到这一点,它也必须在其他地方成功完成此操作。我想我真的在寻找有关如何调查/获取更多信息的指导,因为如果没有一些源代码(我无法真正提供),将很难解决特定问题。我曾尝试在关闭优化的情况下进行调试,这通常是建议的,但没有提供比我在此处发布的更多信息。

    我还担心,即使我找出发生此特定异常的原因并修复它,应用程序中可能还有更多仅在使用 .net native 工具链时才会出现的问题。我可以使用任何工具来帮助解决这个问题吗?

    最佳答案

    所以结果证明这是 Prism (7.0.0.396) 和 .net native 的问题。它看起来像是使用 int? 绑定(bind)可空类型(在本例中为 BindableBase.SetProperty)的属性。使用 .net native 工具链编译时失败。以下似乎解决了这个问题:

    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;
    }
    }

    关于c# - Xamarin.Forms UWP 应用程序在运行时使用 .net native 工具链失败,但可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867384/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com