.NET 6控制台应用在Visual Studio 2022中读取User Secrets失败求助
.NET 6.0 + VS2022 User Secrets读取返回Null的解决办法
问题重现
按文档步骤配置User Secrets后,使用Host.CreateDefaultBuilder构建的配置无法读取secrets.json中的值,返回null。已完成以下前置操作:
- 安装
Microsoft.Extensions.Configuration.UserSecrets和Microsoft.Extensions.Hosting包 - 确认
.csproj文件中已添加<UserSecretsId>节点
代码示例:
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using IHost host = Host.CreateDefaultBuilder(args).Build(); IConfiguration config = host.Services.GetRequiredService<IConfiguration>(); string secret = config.GetValue<string>("DUMMY_VALUE"); // 此处返回null await host.RunAsync();
secrets.json内容:
{ "DUMMY_VALUE": "dummy-test-value" }
解决步骤
1. 确认当前环境为Development
User Secrets仅在Development环境下默认加载。Host.CreateDefaultBuilder会根据DOTNET_ENVIRONMENT或ASPNETCORE_ENVIRONMENT环境变量判断运行环境:
- 验证环境:在代码中添加以下代码,输出当前环境名称
var env = host.Services.GetRequiredService<IHostEnvironment>(); Console.WriteLine($"当前环境: {env.EnvironmentName}"); - 设置环境:在Visual Studio中右键项目→属性→调试→环境变量,添加
DOTNET_ENVIRONMENT=Development
2. 核对UserSecretsId一致性
确保.csproj中的<UserSecretsId>与本地存储机密的文件夹ID完全匹配:
- 打开
.csproj文件,查看<UserSecretsId>的值,例如:<UserSecretsId>abc123-xxxx-xxxx-xxxx-abcdef123456</UserSecretsId> - 打开本地路径
C:\Users\<你的用户名>\AppData\Roaming\Microsoft\UserSecrets,确认存在对应ID的文件夹,且其中的secrets.json是你编辑的内容
3. 显式添加User Secrets配置(可选)
如果默认配置未自动加载User Secrets,可手动在构建Host时显式添加:
using IHost host = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, configBuilder) => { if (context.HostingEnvironment.IsDevelopment()) { // 泛型参数使用当前项目的入口类型(如Program) configBuilder.AddUserSecrets<Program>(); } }) .Build();
4. 排查配置覆盖问题
确认没有其他配置源(如appsettings.json、命令行参数、系统环境变量)定义了同名的DUMMY_VALUE。配置加载优先级中,User Secrets高于appsettings.json,但低于环境变量和命令行参数。
内容的提问来源于stack exchange,提问作者user20114321
相关产品推荐
相关产品推荐

