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

Xamarin.UWP发布版嵌入图片报错,调试版正常求解决方案

Xamarin.UWP发布模式下嵌入图片报错System.PlatformNotSupportedException的解决思路

1. 确认图片资源的生成属性

  • 右键目标图片文件(pic.ico),打开属性面板
  • 确保Build Action设置为Embedded Resource
  • 切换到发布配置,检查UWP项目发布设置,关闭可能移除未使用资源的选项,避免图片被优化丢弃

2. 动态绑定程序集,修复资源查找逻辑

硬编码资源ID在发布模式下可能因程序集优化、重命名导致失效,修改EmbeddedImg类,动态获取当前程序集:

internal class EmbeddedImg : IMarkupExtension
{ 
    public string ResourceId { get; set; }
    public object ProvideValue(IServiceProvider serviceProvider)
    {
        var assembly = typeof(EmbeddedImg).GetTypeInfo().Assembly;
        return ImageSource.FromResource(ResourceId, assembly);
    }
}

3. 调整UWP发布模式的编译设置

  • 打开UWP项目属性的生成选项卡,切换到发布配置
  • 若启用了.NET Native编译,在Default.rd.xml中添加资源保留规则,防止资源被编译优化移除:
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="*Application*" Dynamic="Required All"/>
    <Type Name="EmbImg.Picture.pic.ico" Dynamic="Required All"/>
  </Application>
</Directives>

4. 排除资源与相关类的混淆(若启用混淆)

  • 若项目使用混淆工具,需排除图片所在命名空间(EmbImg.Picture)不被混淆
  • 排除EmbeddedImg类的混淆,确保XAML能正确解析该标记扩展

5. 验证资源ID的准确性

发布模式下可通过代码输出所有资源名称,确认目标资源ID是否正确:

var assembly = typeof(EmbeddedImg).GetTypeInfo().Assembly;
foreach (var resourceName in assembly.GetManifestResourceNames())
{
    System.Diagnostics.Debug.WriteLine(resourceName);
}

将这段代码加入初始化逻辑,查看输出的资源名称,与你使用的EmbImg.Picture.pic.ico对比,确保完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:18:29