![](/img/trans.png)
[英]How to generate the appsettings.<EnvironmentName>.json file?
[英]Can we use a single appsettings.json file instead of maintaining multiple versions of appsettings.{environmentname}.json for different environments?
我正在使用 .NET 6,我想實現兩件事:
appsettings.json
文件而不是為不同的環境維護多個版本的appsettings.{environmentname}.json
appsettings.{environmentname}.json
文件中移除硬編碼以允許 (1)而是從 Azure Key Vault 中讀取相同的秘密值,我已經在其中存儲了相同的秘密值)我怎樣才能實現這些?
下面的代碼片段是我如何維護 2 個appsettings.{environmentname}.json
文件(Development & Release)
:
var builder = WebApplication.CreateBuilder(args);
var hostingEnvironment = builder.Environment;
if (hostingEnvironment.IsDevelopment())
{
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.Development.json", false, true)
.AddEnvironmentVariables();
}
else
{
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.Release.json", false, true)
.AddEnvironmentVariables();
}
注意:我做了一些研究,了解到對於(1)
我們可能會做類似的事情:
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable(
"ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
但是,假設每次利用 CI/CD 時應用程序都會自動部署,我可以在管道中設置AS.NETCORE_ENVIRONMENT
的值嗎?
至於, (2)
,我嘗試從 appsettings.{environment}.json 文件中刪除硬編碼的秘密並配置密鑰庫,如下所示,但它不起作用:
builder.Services.Configure<KeyVaultConfig>(options => builder.Configuration.GetSection("KeyVaultConfig").Bind(options));
if (!string.IsNullOrEmpty(builder.Configuration["KeyVaultConfig:KeyVaultUrl"]))
{
var credentials = new ClientSecretCredential(builtConfig["KeyVaultConfig:TenantID"], builtConfig["KeyVaultConfig:ClientID"], builtConfig["KeyVaultConfig:ClientKey"]);
var secretClient = new SecretClient(new Uri(builtConfig["KeyVaultConfig:KeyVaultUrl"]), credentials);
//builder.Configuration.AddAzureKeyVault...
}
如果最后你打算使用 CI/CD,你只需要 2 個文件(appsettings.json 和 appsettings.Development.json)和默認的 C# 處理這些文件。
在開發中,您對開發所需的所有配置進行硬編碼。 在標准模式中,您放置將在 CI/CD 管道期間替換的密鑰。
例如
在 appsettings.development.json 你有
"ConnectionStrings": {
"myDb": "Server=myDbServer;Database=myDb;User Id=userDev;Password=myPassword;"
}
在 appsettings.json 你有
"ConnectionStrings": {
"myDb": "#{connectionString}#"
}
然后將“#{connectionString}#”替換為 CI/CD 管道配置中的環境值
如果您真的只想擁有一個文件,您可以嘗試使用 Json 變量替換,就像在 CI/CD 管道中記錄的此處記錄的那樣,但第一種方法允許您更輕松地處理保管庫的秘密
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.