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

Xamarin.Forms Android项目添加BuildDate资源及PCL访问问题求助

解决Xamarin.Forms Android项目中构建日期资源的添加与访问问题

嘿,我来帮你搞定这个构建日期资源的问题~你遇到的报错和访问难题,其实是因为Android资源目录的规则和PCL跨平台访问的限制,咱们一步步来解决:

一、先搞定BuildDate.txt的资源添加(解决目录报错)

你碰到的invalid resource directory name错误,是因为Android的Resources目录有严格的结构要求——它的直接子目录必须是系统规定的类型(比如drawable、values、raw这些),不能直接把自定义文本文件扔在Resources根目录。正确操作是:

  • 在MyProject.Droid/Resources下面新建一个raw子文件夹(没有的话就建一个)
  • 把你的BuildDate.txt移到这个raw文件夹里
  • 然后把文件的生成操作设置为AndroidResource,这时候就不会报错啦

为啥用raw目录?因为raw是Android专门用来存原生资源文件的地方,支持任意格式,会完整打包进APK,还能保留原始文件名,完美适配咱们的需求。

二、自动更新BuildDate.txt的构建日期(可选但实用)

既然你已经能更新文件内容,这里给你补个自动更新的方法,省得每次手动改:
打开Android项目的.csproj文件,添加这段MSBuild任务,每次构建时会自动把当前日期写入文件:

<Target Name="WriteBuildDate" BeforeTargets="Build">
  <WriteLinesToFile File="Resources\raw\BuildDate.txt" Lines="$([System.DateTime]::Now.ToString('yyyy/MM/dd HH:mm:ss'))" Overwrite="true" />
</Target>

三、在PCL ViewModel里访问这个资源

PCL不能直接访问Android平台的资源,所以得用Xamarin的依赖服务来跨平台获取内容,步骤很简单:

1. 在PCL项目里定义一个接口

先写个接口,规定好获取构建日期的方法:

public interface IBuildDateService
{
    string GetBuildDate();
}

2. 在Android项目里实现这个接口

在MyProject.Droid项目里写个实现类,读取raw目录下的文件:

[assembly: Dependency(typeof(BuildDateService))]
namespace MyProject.Droid
{
    public class BuildDateService : IBuildDateService
    {
        public string GetBuildDate()
        {
            using (var stream = Android.App.Application.Context.Resources.OpenRawResource(Resource.Raw.BuildDate))
            using (var reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
    }
}

注意:Resource.Raw.BuildDate是系统自动生成的资源ID,只要你文件放对位置、生成操作设对,就能自动拿到这个ID,不用手动写。

3. 在PCL的ViewModel里调用

现在就可以在你的ViewModel里轻松获取构建日期了:

public class YourViewModel
{
    public string BuildDate { get; set; }

    public YourViewModel()
    {
        BuildDate = DependencyService.Get<IBuildDateService>().GetBuildDate();
    }
}

四、小问题排查

  • 如果找不到Resource.Raw.BuildDate:检查文件是不是在raw目录,生成操作是不是AndroidResource,然后清理项目再重新构建试试。
  • 如果读取出来是空的:确认BuildDate.txt确实有内容,或者检查自动更新的MSBuild任务有没有正确执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:55:10