我正在 Mac 上运行 .net core 2.1 应用程序,并且尝试访问我的连接字符串,该字符串应该被我的用户机密覆盖。 .csproj 文件包含一个 guid
<UserSecretsId>{{Secret Guid}}</UserSecretsId>
添加用户密钥
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Secret Connection String"
我创建的配置可以完美地从 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"]);
正如我之前所说的,尝试访问这些值时,它不会用用户机密值替换这些值。请让我知道我缺少什么。
将配置源添加到的顺序ConfigurationBuilder
is 重要的- 后来添加的内容会覆盖之前添加的内容。在您的示例中,您正在调用AddUserSecrets
before 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);
鉴于此,您可能还想移动AddEnvironmentVariables
稍后在配置设置中调用运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)