Dbl*_*247 5 c# asp.net-core asp.net-core-2.1
我在mac上运行.net核心2.1应用程序,我试图访问我的连接字符串,应该被我的用户机密覆盖..csproj文件包含一个guid
<UserSecretsId>{{Secret Guid}}</UserSecretsId>
Run Code Online (Sandbox Code Playgroud)
添加用户密钥
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Secret Connection String"
Run Code Online (Sandbox Code Playgroud)
我创建了完全从我的appsettings.json文件中读取的配置,但它没有用我的用户机密中的值替换默认值.
// this is done so I build my configurations in a class library
var assembly = AppDomain.CurrentDomain.GetAssemblies()
.Single(o => o.EntryPoint != null);
var configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
// .AddUserSecrets<Program>() -> This does not work either
.AddUserSecrets(assembly, optional: false);
configurationBuilder.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
var configuration = configurationBuilder.Build();
Console.WriteLine(configuration["ConnectionStrings:DefaultConnection"]);
Run Code Online (Sandbox Code Playgroud)
正如我之前所说的尝试访问值,它不会用用户机密值替换值.请让我知道我错过了什么.
Kir*_*kin 10
向您添加配置源的顺序ConfigurationBuilder非常重要 - 稍后添加的顺序将覆盖首先添加的顺序.在您的示例中,您AddUserSecrets之前正在调用AddJsonFile,这会导致您的JSON文件值覆盖用户机密中定义的值.
为了完整起见,这是一个固定版本:
var configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables();
configurationBuilder.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
// configurationBuilder.AddUserSecrets<Program>(); -> This does not work either
configurationBuilder.AddUserSecrets(assembly, optional: false);
Run Code Online (Sandbox Code Playgroud)
鉴于此,您可能还希望将AddEnvironmentVariables调用移至稍后在配置设置中运行.
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |