在 .net 核心中自动进行开发和发布
Automatically for dev and release in .net core
我查看了 并完成了所描述的内容等。但是当我 运行 我的“API (dev)”时,它就像那样将内容放入实时数据库。但原则上它不应该那样做。它应该把它扔进 database_test 但它没有。
因此,当我 运行 在“API (prod)”中结束时,它失败了,因此不允许我将东西扔进数据库。
appsettings.Development.json
"ConnectionStrings": {
"Db": "xxxx"<--- Test database
}
appsettings.json
"ConnectionStrings": {
"Db": "xxxx"<--- Live database
}
launchSettings.json
{
xxxx,
"profiles": {
xxxxx,
"API (prod)": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "https://localhost:8082;http://localhost:8444",
"dotnetRunMessages": "true"
},
"API (dev)": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:8081;http://localhost:8443",
"dotnetRunMessages": "true"
},
xxxxx
}
}
Startup.cs
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.Development.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
问题只是当我 运行 开发时它把它扔进了实时数据库,但后来它抛出了实时数据库的内容,但我只希望它把它扔进测试数据库。当它上线时,它会把它扔到实时数据库中。
EIDT - 更新。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("xxxxx");
}
}
发现这就是我无法使用测试的原因。所以现在我只需要弄清楚如何完成它,以便它在我开发时使用测试并在它启动时使用它。
根据您 link 的指南,您不需要显式加载应用程序设置文件。默认情况下,它将自动加载 appsettings.json
和 appsettings.<Environment>.json
。它还会自动加载它找到的带有 ASPNETCORE_
前缀的任何环境变量。 (或 DOTNET_
对于通用主机)
我会删除冗余代码。让构建器完成它的工作,并确保在您的应用程序启动时设置并可用环境变量。如果您无法通过 Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
找到或获得任何值或您期望的值,那么它们的设置方式有问题。
此外,appsettings.json
将加载,而不管是否存在缺少变量的任何问题,因此我不会将生产连接字符串放在那里。相反,将您的本地或开发连接字符串放在那里,让生产值覆盖 dev/default 值,这样您就不会不小心默认为生产。
我查看了
因此,当我 运行 在“API (prod)”中结束时,它失败了,因此不允许我将东西扔进数据库。
appsettings.Development.json
"ConnectionStrings": {
"Db": "xxxx"<--- Test database
}
appsettings.json
"ConnectionStrings": {
"Db": "xxxx"<--- Live database
}
launchSettings.json
{
xxxx,
"profiles": {
xxxxx,
"API (prod)": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "https://localhost:8082;http://localhost:8444",
"dotnetRunMessages": "true"
},
"API (dev)": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:8081;http://localhost:8443",
"dotnetRunMessages": "true"
},
xxxxx
}
}
Startup.cs
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.Development.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
问题只是当我 运行 开发时它把它扔进了实时数据库,但后来它抛出了实时数据库的内容,但我只希望它把它扔进测试数据库。当它上线时,它会把它扔到实时数据库中。
EIDT - 更新。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("xxxxx");
}
}
发现这就是我无法使用测试的原因。所以现在我只需要弄清楚如何完成它,以便它在我开发时使用测试并在它启动时使用它。
根据您 link 的指南,您不需要显式加载应用程序设置文件。默认情况下,它将自动加载 appsettings.json
和 appsettings.<Environment>.json
。它还会自动加载它找到的带有 ASPNETCORE_
前缀的任何环境变量。 (或 DOTNET_
对于通用主机)
我会删除冗余代码。让构建器完成它的工作,并确保在您的应用程序启动时设置并可用环境变量。如果您无法通过 Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
找到或获得任何值或您期望的值,那么它们的设置方式有问题。
此外,appsettings.json
将加载,而不管是否存在缺少变量的任何问题,因此我不会将生产连接字符串放在那里。相反,将您的本地或开发连接字符串放在那里,让生产值覆盖 dev/default 值,这样您就不会不小心默认为生产。