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

Xamarin.Forms中Secrets.cs未生成,无法通过IntelliSense访问Secrets对象的问题求助

解决Xamarin.Forms中Secrets对象无法被IntelliSense识别的问题

看起来你已经完成了基础的NuGet安装和secrets.json创建,但要让Secrets.KumKey1正常工作,还缺了几个关键步骤,我帮你梳理一下:

1. 将secrets.json设置为嵌入资源

右键项目根目录下的secrets.json文件 → 选择「属性」→ 在「生成操作」下拉菜单中选择「嵌入的资源」。这一步是核心,否则编译时文件不会被打包进程序集,后续代码根本找不到它。

2. 创建Secrets静态类读取配置

secrets.json本身只是文本文件,不会自动生成Secrets对象供你直接调用。你需要手动写一个静态类来读取并映射JSON内容,示例代码如下:

using System;
using System.IO;
using System.Reflection;
using Newtonsoft.Json; // 若用System.Text.Json可替换,需对应.NET版本支持

namespace YourAppNamespace // 替换成你实际的应用命名空间
{
    public static class Secrets
    {
        private static readonly Lazy<SecretsModel> _secretValues = new Lazy<SecretsModel>(LoadSecretsFromJson);

        public static string KumKey1 => _secretValues.Value.KumKey1;

        private static SecretsModel LoadSecretsFromJson()
        {
            var assembly = typeof(Secrets).GetTypeInfo().Assembly;
            // 资源名称格式为「命名空间.文件名」,务必和实际匹配
            var resourceName = $"{typeof(Secrets).Namespace}.secrets.json";

            using (var stream = assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null)
                    throw new FileNotFoundException("secrets.json未找到,请检查嵌入资源配置和命名空间");

                using (var reader = new StreamReader(stream))
                {
                    var jsonContent = reader.ReadToEnd();
                    return JsonConvert.DeserializeObject<SecretsModel>(jsonContent);
                }
            }
        }

        // 内部类用于映射JSON结构
        private class SecretsModel
        {
            public string KumKey1 { get; set; }
        }
    }
}

3. 确认NuGet依赖匹配

如果用上面的代码,需确保对应序列化包已安装:

  • 若使用Newtonsoft.Json:给所有相关项目安装Newtonsoft.Json NuGet包
  • 若使用System.Text.Json:确认项目目标.NET版本支持(如.NET Standard 2.0+),无需额外安装包,直接替换序列化代码即可。

4. 清理并重新生成解决方案

IntelliSense偶尔会有缓存问题,做完上述步骤后,右键解决方案 → 选择「清理解决方案」,再点击「重新生成解决方案」,IntelliSense就能识别Secrets对象了。

如果不确定嵌入资源名称是否正确,可以临时添加var resourceNames = assembly.GetManifestResourceNames();,调试时查看所有嵌入资源列表,确认secrets.json是否在其中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:29:09