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

Xamarin.Forms如何将音频文件正确生成到AppResources.Designer.cs

Xamarin.Forms .resx资源文件无法自动生成音频对应Designer属性的修复方案

问题描述

开发Xamarin.Forms应用时采用.resx文件实现本地化,需要在Resources文件夹添加Beep.wav音频资源。
正常情况下AppResources.Designer.cs会自动生成对应流资源属性:

/// <summary>
///   Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
/// </summary>
internal static System.IO.UnmanagedMemoryStream Beep
{
    get
    {
        return ResourceManager.GetStream("Beep", resourceCulture);
    }
}

目前该属性无故消失,即使通过增删resx内字符串触发Designer文件重新生成,Beep对应属性也不会自动生成。手动添加代码可临时运行,但每次resx重新生成时代码都会被覆盖。
调用音频资源时会抛出找不到Beep资源的错误,报错代码位置:

private static readonly ISimpleAudioPlayer _beepPlayer;

static MediaPlayerHelper()
{
    _beepPlayer = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
    _beepPlayer.Load(Resources.AppResources.Beep); // 此处报错
}

修复步骤

  • 打开AppResources.resx设计视图(双击解决方案资源管理器中的resx文件即可打开),将设计器顶部的资源类型筛选从默认的「字符串」切换为「音频」分类
  • 点击设计器顶部「添加资源」的下拉按钮,选择「添加现有文件」,选中本地存储的Beep.wav完成导入。不要手动将wav文件拷贝到Resources目录后直接修改resx XML内容,这种方式会缺失资源类型元数据,导致代码生成器无法识别,不会输出对应属性
  • 导入后选中Beep条目,在属性面板确认「持久性」配置为「嵌入在.resx中」,保存resx文件后,Designer.cs会自动重新生成Beep对应的流属性
  • 如果完成上述操作后仍未生成属性,右键项目选择「卸载项目」,编辑.csproj文件,确认AppResources.resx的嵌入资源配置包含正确的代码生成器设置:
<EmbeddedResource Update="Resources\AppResources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>AppResources.Designer.cs</LastGenOutput>
</EmbeddedResource>

修改完成后重新加载项目,再次保存resx文件即可触发正常生成

  • 额外排查:确认单独放在Resources文件夹下的Beep.wav文件的生成操作没有设置为「嵌入的资源」,避免重复嵌入引发的识别冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.17 16:16:01