gpt4 book ai didi

c# - 在 .NET Core 控制台应用程序中使用 appsettings.ENV.json

转载 作者:行者123 更新时间:2023-12-04 14:45:10 24 4
gpt4 key购买 nike

我正在构建一个控制台应用程序来为我做一些数据库工作,并希望设置不同的 appsettings 文件来存储每个环境的适当连接字符串。我目前在我的 Main 函数中有这样的工作:

static void Main(string[] args)
{
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();

var dbconnection = config["db"];
}

但是,虽然这是有效的,但它只是一个全局 appsettings 文件。我希望能够为每个环境创建不同的 appsettings(例如 appsettings.Dev.jsonappsettings.Staging.json 等),但是当我运行app 添加到 addjsonfile 字符串。

对于一些额外的上下文,如果这会影响任何事情,我想稍后在应用程序中将其输入到我的 dbcontext 中。

最佳答案

此处的其他答案很有帮助,但我想详细说明我为遇到此问题的其他人所做的工作。

您要做的第一件事是进入您的启动 settings.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; }
}

关于c# - 在 .NET Core 控制台应用程序中使用 appsettings.ENV.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61634578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com