如何 运行 `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
文档提到 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