[英].Net Core 2.1 not reading User Secrets
我在mac上運行.net核心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
的順序非常重要 - 稍后添加的順序將覆蓋之前添加的順序。 在你的榜樣,你打電話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);
鑒於此,您可能還希望將AddEnvironmentVariables
調用移至稍后在配置設置中運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.