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

Xamarin.Forms项目Azure DevOps构建后ipa和apk包丢失appsettings.json问题

Xamarin.Forms appsettings.json 打包缺失问题排查点

1. 资源类型与预期访问逻辑不匹配

  • 如果你希望appsettings.json作为独立物理文件出现在apk/ipa的文件目录中直接读取,将其设置为Embedded Resource属于错误配置
    • Embedded Resource的作用是把文件编译嵌入到共享项目生成的.dll程序集的资源清单中,不会作为独立文件输出到应用包的文件系统
    • 若要读取嵌入式资源,需通过程序集接口读取,示例代码:
      // 替换为共享项目中任意存在的类,用于获取对应程序集
      var assembly = typeof(App).Assembly;
      // 资源名称默认规则:共享项目默认命名空间.文件路径.文件名,大小写敏感
      using var stream = assembly.GetManifestResourceStream("YourAppNamespace.appsettings.json");
      using var reader = new StreamReader(stream);
      string jsonContent = reader.ReadToEnd();
      

2. 构建环境大小写校验规则差异

  • Windows本地文件系统大小写不敏感,资源名称大小写写错也能正常读取,但Azure DevOps的macOS/Linux构建代理对大小写严格校验
    • 可以本地调试时输出所有资源名确认准确的资源命名:
      var assembly = typeof(App).Assembly;
      string[] allResourceNames = assembly.GetManifestResourceNames();
      // 输出allResourceNames数组内容,找到appsettings.json对应的准确资源名
      

3. 项目构建配置异常

  • 检查共享项目的.csproj文件,确认文件配置没有被条件规则排除:
    <ItemGroup>
      <EmbeddedResource Include="appsettings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </EmbeddedResource>
    </ItemGroup>
    
  • 检查Azure DevOps构建的详细日志,搜索appsettings.json关键词,确认文件没有被生成流程跳过
  • 如果文件放在共享项目的子目录下,资源名称需要拼接子目录名称,比如放在Config文件夹下的资源名为YourAppNamespace.Config.appsettings.json

4. 独立文件打包方案

如果你确实需要appsettings.json作为独立文件出现在应用包内,需要按平台分别配置:

  • Android端:将文件放到Android项目的Assets目录下,设置属性为AndroidAsset+Copy if newer,通过Assets.Open("appsettings.json")读取
  • iOS端:将文件放到iOS项目的根目录下,设置属性为BundleResource+Copy if newer,通过NSBundle.MainBundle.PathForResource("appsettings", "json")获取路径读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:24:04