Discord.net Configuration Builder报错求助:不知如何修复
问题解决与配置逻辑说明
一、你的配置代码作用逻辑
拆解每一行的实际作用:
new ConfigurationBuilder():创建配置构建器,用来整合多种来源的配置数据.AddEnvironmentVariables(prefix: "bot_"):读取系统中所有以bot_开头的环境变量,读取时会自动去掉前缀(比如bot_Token会被识别为Token).AddJsonFile("bot_info.json", optional: true):读取当前项目目录下的bot_info.json配置文件,optional: true意味着就算文件不存在,程序也不会直接崩溃.Build():把所有配置来源整合为一个可读取的配置对象,后续你可以通过它获取机器人需要的配置值
二、AddEnvironmentVariables行报错解决
大概率是你用的Microsoft.Extensions.Configuration相关包版本太低——早期版本的AddEnvironmentVariables方法没有prefix这个参数。解决方法二选一:
- 推荐:升级NuGet包
打开项目的NuGet包管理器,找到Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.EnvironmentVariables,更新到最新稳定版,就能直接用prefix参数了 - 不升级的替代写法
如果不想升级包,手动处理环境变量前缀:_configuration = new ConfigurationBuilder() .AddEnvironmentVariables() // 手动筛选并处理带bot_前缀的环境变量 .AddInMemoryCollection(Environment.GetEnvironmentVariables() .Cast<DictionaryEntry>() .Where(kv => kv.Key.ToString().StartsWith("bot_")) .ToDictionary(kv => kv.Key.ToString().Substring(4), kv => kv.Value.ToString())) .AddJsonFile("bot_info.json", optional: true) .Build();
三、满足你的核心需求
1. 阻止bot_info.json上传到GitHub
在项目根目录新建.gitignore文件,添加一行内容:
bot_info.json
Git会自动忽略这个文件,不会把它提交到仓库。另外可以建一个bot_info.example.json,写好配置项的示例(比如{"Token": "你的机器人令牌"}),把这个示例文件提交到仓库,方便其他开发者参考配置格式。
2. 让机器人用配置上线
配置加载顺序决定了优先级:当前你的代码是环境变量优先于JSON文件,也就是如果某个配置项在环境变量和JSON里都有,会用环境变量的值。如果想让JSON文件优先,调换加载顺序就行:
_configuration = new ConfigurationBuilder() .AddJsonFile("bot_info.json", optional: true) .AddEnvironmentVariables(prefix: "bot_") .Build();
之后读取配置初始化机器人即可,比如读取令牌:
var botToken = _configuration["Token"]; // 用botToken初始化你的机器人客户端
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

