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

Xamarin UWP Release模式下EmbeddedFileProvider报平台不支持错误如何解决

根因分析
  • 该问题本质是Xamarin UWP Release模式默认启用*.NET Native工具链编译*时,对Microsoft.Extensions.Configuration相关依赖的嵌入式资源读取逻辑做了过度裁剪,EmbeddedFileProvider依赖的反射调用、嵌入式资源寻址接口在裁剪后丢失了必要的元数据和平台兼容实现,因此抛出平台不支持错误。
  • Debug模式未启用.NET Native编译,不会触发裁剪逻辑,因此运行正常。
可行临时解决方案

除你已使用的读取物理文件方案外,还有两个更轻量的替代方案:

方案1:直接读取嵌入式资源流加载配置,绕过EmbeddedFileProvider

无需依赖EmbeddedFileProvider,直接通过Assembly读取嵌入式appsettings.json的流,再添加到ConfigurationBuilder中,代码示例:

var assembly = typeof(AppStartup).Assembly;
using var stream = assembly.GetManifestResourceStream("你的项目命名空间.appsettings.json");
var config = new ConfigurationBuilder()
    .AddJsonStream(stream)
    .Build();

该方案不需要修改配置文件的生成属性,也无需把配置文件放到输出目录,和原本的嵌入式加载逻辑使用体验一致,不会触发EmbeddedFileProvider的平台兼容问题。

方案2:在.NET Native裁剪规则中保留Configuration相关程序集的元数据

在UWP项目的Default.rd.xml文件中添加如下裁剪排除规则,避免.NET Native裁剪掉Configuration依赖的必要类型:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="Microsoft.Extensions.Configuration" Dynamic="Required All" />
    <Assembly Name="Microsoft.Extensions.Configuration.Json" Dynamic="Required All" />
    <Assembly Name="Microsoft.Extensions.FileProviders.Embedded" Dynamic="Required All" />
    <Assembly Name="Microsoft.Extensions.FileProviders.Abstractions" Dynamic="Required All" />
  </Application>
</Directives>

该方案可以保留你原来的EmbeddedFileProvider加载逻辑无需改动,缺点是会略微增大应用的包体积。

正式修复方案
  • 若计划后续迁移应用到Windows App SDK(WinUI 3),可直接替换Xamarin UWP的实现,WinUI 3对.NET 6+的Microsoft.Extensions相关包兼容性完整,不存在该裁剪问题。
  • 若需要继续维护Xamarin UWP版本,可向Microsoft.Extensions.Configuration官方仓库提交UWP平台兼容的PR,或等待官方发布针对Xamarin UWP .NET Native场景的兼容补丁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:24:04