You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP应用经.NET Native编译后启动抛出MissingMetadataException异常

解决方案

这是.NET Native编译阶段对WinRT互操作用到的泛型类型元数据过度裁剪导致的问题,可按以下步骤排查修复:

  • 修正运行时指令(项目里的Default.rd.xml文件)的写法,你之前的写法存在泛型类型解析不匹配的问题,替换为以下内容即可:
<Type Name="Windows.Foundation.IReference`1[[System.Double, System.Private.CoreLib]]" Dynamic="Required All" />

如果上述写法仍不生效,可直接对Windows.Foundation命名空间下的对应IReference泛型类型做全局保留:

<Namespace Name="Windows.Foundation" >
  <TypeInstantiation Name="IReference" Arguments="System.Double" Dynamic="Required All" />
</Namespace>
  • 也可以通过硬编码引用类型的方式绕开rd.xml配置,在项目任意公共类中加入以下代码即可:
using System.Runtime.CompilerServices;
using Windows.Foundation;

public class DummyClass
{
    [Preserve]
    private static void KeepIReferenceMetadata()
    {
        _ = default(IReference<double>);
    }
}

[Preserve]特性会告诉.NET Native编译器不要裁剪该方法引用的所有类型,不需要主动调用该方法也会生效。

  • 排查XAML绑定逻辑,确认是否存在将double?类型的属性直接绑定到原生依赖属性的场景,如果有可以新增一个非空的double类型的包装属性做绑定中转,也能规避该反射调用异常。

内容的提问来源于stack exchange,提问作者NPadrutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:54:00