Другие ответы здесь были полезны, но я хотел подробно рассказать о том, что я сделал для других, которые столкнулись с этим.
Первое, что вам нужно сделать, это go в свой запуск settings. json и добавьте что-то вроде этого:
{
"profiles": {
"DataMigration (Local)": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Local"
}
},
"DataMigration (Dev)": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Dev"
}
}
}
}
Это даст вам доступ к переменной среды в зависимости от того, с каким профилем вы запускаете свой проект (обратите внимание, что диспетчер конфигурации здесь не влияет).
Затем вы можете создавать различные файлы приложений. 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"];
}
Чтобы сделать еще один шаг вперед, вместо того, чтобы делать это здесь, я сделал контекст базы данных гибкий, например:
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; }
}