簡體   English   中英

.Net Core 2.1不讀取用戶秘密

[英].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的順序非常重要 - 稍后添加的順序將覆蓋之前添加的順序。 在你的榜樣,你打電話AddUserSecretsAddJsonFile ,這會導致你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM