![](/img/trans.png)
[英]Sentry configuration in appsettings.json with Serilog in .Net Core 3 Console App
[英]Using appsettings.ENV.json in .NET Core Console App
我正在構建一個控制台應用程序來為我做一些數據庫工作,並希望設置不同的 appsettings 文件來為每個環境存儲適當的連接字符串。 目前,我的 Main function 中有這樣的工作:
static void Main(string[] args)
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
var dbconnection = config["db"];
}
但是,雖然這有效,但它只是一個全局 appsettings 文件。 我希望能夠為每個環境創建不同的 appsettings(例如appsettings.Dev.json
、 appsettings.Staging.json
等),但我不知道如何提供配置管理器中的任何選擇當我將應用程序運行到 addjsonfile 字符串時。
對於一些額外的上下文,如果這會影響任何內容,我想稍后在應用程序中將其輸入到我的 dbcontext 中。
這里的其他答案很有幫助,但我想詳細說明我為遇到此問題的其他人所做的事情。
您要做的第一件事是將 go 放入您的啟動設置中。json 並添加如下內容:
{
"profiles": {
"DataMigration (Local)": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Local"
}
},
"DataMigration (Dev)": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Dev"
}
}
}
}
這將使您可以訪問環境變量,具體取決於您使用哪個配置文件啟動項目(請注意配置管理器在這里沒有影響)。
然后您可以創建不同的 appsetting.json 文件。 例如,我制作了一個appsettings.Local.json
和一個appsettings.Dev.json
文件。
appsettings.Local.json
{
"db": "connectionstringhere"
}
和
appsettings.Dev.json
{
"db": "connectionstringhere"
}
現在,您可以訪問運行應用程序的環境變量,如下所示:
static void Main(string[] args)
{
var myEnv = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile($"appsettings.{myEnv}.json", false)
.Build();
var dbconnection = config["db"];
}
為了更進一步,我沒有在此處執行此操作,而是通過 db context 靈活設置,如下所示:
public class ShoppingDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var myEnv = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
if(myEnv != null)
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile($"appsettings.{myEnv}.json", false)
.Build();
var sl = config[$"db"];
optionsBuilder.UseSqlServer(sl);
}
else
{
// we are testing and want local for sure
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile($"appsettings.Local.json", false)
.Build();
var sl = config[$"db"];
optionsBuilder.UseSqlServer(sl);
}
}
public DbSet<MyTable> MyTables { get; set; }
}
您正在構建控制台應用程序這一事實無關緊要:您可以像 ASP.NET 核心應用程序一樣處理這個問題(實際上也只是一個控制台應用程序)。
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
在這里, env
是IHostingEnvironment
的一個實例,這里不適用於您的情況。 但是,它的唯一目的是獲取作為environment
配置值的值。 該值可以通過多種方式設置,最常見的是通過ASPNETCORE_ENVIRONMENT
環境變量。 但是,它也可以作為命令行參數傳遞。 由於您在此處構建控制台應用程序,因此您可以隨意提供它。 最后,您只需將環境值放入AddJsonFile
調用中的文件名中。
// get environment value from either `Environment.GetEnvironmentVariable` or by parsing command line arguments
.AddJsonFile($"appsettings.{myEnvironment}.json", optional: true, reloadOnChange: true);
您也可以選擇分兩輪進行配置。 在第一輪中,您添加環境變量和/或命令行參數配置提供程序,構建該配置源,然后使用它為第二個配置設置提取環境值,即您實際將要成為的環境值使用。 僅對環境變量來說這有點矯枉過正,但是如果您想提供通過命令行 arguments 提供值的選項,那么所有手動解析都會很痛苦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.