文档提到在2.0中没有支持传递自定义环境变量,但EF核心1.0支持--environment参数。我觉得EF Core 2.0仍然支持此功能。
目前,我正在将多个应用程序部署到同一台计算机上,但在同一台计算机上部署了不同的版本。我正在使用Puppet自动执行某些部署过程,最终使用IIS中的网站,例如Company.Project.[env]
。其中env
类似.dev,.test,.uat,每个都在单独的AppPool下运行等等。现在,使用ASP.NET Core 2.0,我可以应用< environmentVariable
>每个已部署的aspnet核心网站的web.config,web.config
中的环境变量优先于ASPNETCORE_ENVIRONMENT
的任何计算机环境变量。在puppet部署期间,它会在web.config中为ASPNETCORE_ENVIRONMENT变量插入正确的值,这对我来说非常有意义,并且允许每个已部署的应用程序仍然正确引导并加载到正确的appsettings.[environment].json
文件中。
现在,使用EF Core 2.0,我无法做到这一点。我计划为每个环境部署一个单独的数据库项目,并为每个已部署的包添加环境名称,就像我在网站上这样做一样,并计划以某种方式传入--environment来运行任何dotnet ef
命令并使它们读取正确的appsettings.[environment].json
文件,该文件具有正确定位的数据库环境连接字符串以运行迁移。
如果ASPNET核心网站支持< environmentVariable
>在web.config
中,允许将多个项目部署到使用唯一环境变量的同一台机器上。然后我觉得EF Core应该支持传入--environment。
由于不再支持此功能,因此在同一台计算机上多次部署应用程序的最佳方法是运行dotnet ef
命令来定位特定的appsettings。[environment] .json以确保ef command使用已部署项目中的特定连接字符串,然后在该计算机上的正确数据库上运行迁移。
答案 0 :(得分:1)
EF Core将支持将自定义参数传递给ef工具命令的方法。我发现有一个问题是跟踪此功能。
https://github.com/aspnet/EntityFrameworkCore/issues/8332
完成此操作后,可以将连接字符串或任何其他环境参数与ef命令一起传递。
答案 1 :(得分:0)
遵循@Konrad的建议:
在您的项目路径类型上运行的终端
export ASPNETCORE_ENVIRONMENT =生产<-或您的环境
运行该命令之后,将使用您环境的appsettings.json(appsettings.Production.json)
我当前正在使用ASP Net Core 2.2