如何 运行 `dotnet ef` 命令以 EF Core 2.0 中的特定 appsettings.[environment].json 为目标

How to run `dotnet ef` commands to target a specific appsettings.[environment].json in EF Core 2.0

文档提到 2.0 不支持传入自定义环境变量,但 EF core 1.0 支持 --environment 参数。我觉得 EF Core 2.0 应该仍然支持此功能。

目前,我正在将多个应用程序部署到同一台机器上,但在同一台机器上部署不同的版本。我正在使用 Puppet 来自动化一些部署过程,并最终在 IIS 中创建网站,例如 Company.Project.[env]。其中 env 类似于 .dev、.test、.uat 每个 运行ning 在单独的 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 传递给 运行 any dotnet ef 命令并使它们读取正确的 appsettings.[environment].json 文件,该文件将具有针对 运行 迁移的正确目标数据库环境连接字符串。

如果 ASPNET Core 网站支持 web.config 中的 <environmentVariable>,它允许将多个项目部署到使用唯一环境变量的同一台机器上。然后感觉EF Core应该支持传入--environment.

由于不再支持此功能,在同一台机器上多次部署应用程序以及针对特定应用程序设置的 运行 dotnet ef 命令的最佳方式是什么。[环境] .json 以确保 ef 命令在部署的项目中使用特定的连接字符串,然后 运行 在该机器上的正确数据库上进行迁移。

EF Core 将支持一种将自定义参数传递给 ef 工具命令的方法。我发现有一个问题正在跟踪此功能。

https://github.com/aspnet/EntityFrameworkCore/issues/8332

一旦完成,连接字符串或任何其他环境参数就可以随 ef 命令一起传递。

遵循@Konrad 的建议:

在终端上 运行在您的项目路径类型上

导出 ASPNETCORE_ENVIRONMENT=生产 <- 或您的环境

之后,您 运行 的任何命令都会使用您环境的 appsettings.json (appsettings.Production.json)

我目前正在使用 asp net core 2.2