为每个环境部署不同的连接字符串

Evo*_*net 7 asp.net-core-2.0 asp.net-core-configuration

我正在尝试从mac部署IIS上的asp.net核心2.0 api项目.

我想要做的是为我的开发,登台和生产环境设置不同的appsettings.json文件,然后使用dotnet -build作为我的部署脚本的一部分来调用不同的环境.

我看过https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments,这是针对旧版.net核心的,我无法理解我需要做的事情.我不是为操作系统设置环境,而是以编程方式设置它(因为我的登台和生产环境是针对同一台服务器的)

我有一个appsettings.Development.json文件,它在我运行我的应用程序时使用,但我似乎无法在设置环境变量作为构建命令的一部分时加载我的appsettings.Production.json文件.

bash$ ASPNETCORE_ENVIRONMENT=Production dotnet run
Using launch settings from /Properties/launchSettings.json...
Hosting environment: Development
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)

最终,我正在尝试根据我构建的环境部署特定的连接字符串.有一个更好的方法吗?

更新

@Chris的回答有帮助,另外我发现了以下内容:

每个IIS应用程序池如果需要为在隔离的应用程序池中运行的各个应用程序设置环境变量(在IIS 10.0+上受支持),请参阅IIS参考文档中的环境变量主题的AppCmd.exe命令部分.

这让我可以为每个应用程序池设置不同的环境

Chr*_*att 9

该文档不适用于旧版本的ASP.NET Core.那里的一切仍然适用,而且全部布局,所以我不确定这里的混乱究竟来自哪里.

在最简单的形式中,您只需创建一个或多个appsettings.{environment}.json文件.默认情况下,appsettings.json首先加载,然后加载,如果存在,appsettings.{environment}.json则加载与当前环境匹配的文件.这允许您覆盖主appsettings.json文件中的设置,特别是环境.但是,更好的方法是仅放置不受环境影响的全局设置,appsettings.json然后将所有特定于环境的设置保留到特定于环境的文件中.

无论如何,在任何一种情况下,当您部署应用程序时,都会复制所有设置文件.ASP.NET Core项目不是基于像旧的ASP.NET项目那样的特定配置发布的.这意味着可以在多个不同的环境中部署相同的已发布文件,而无需重新发布.

在运行时使用的环境由ASPNETCORE_ENVIRONMENT环境变量的值确定.只需在服务器上设置它应该是什么,你就可以了.

如果您在IIS后面运行,则需要再执行一步.默认情况下,App Pool不会加载环境变量.您可以通过在IIS中编辑应用程序池的高级属性并将"加载用户配置文件"设置更改为来更改此设置true.

  • 因为我有一台服务器可以为许多不同的站点运行API,一些升级,一些生产.我宁愿回答不是改变1服务器到7! (5认同)
  • 为什么以世界上所有美好事物为名,你会做那个*?同一台服务器永远不应容纳多个环境.你只是在寻找麻烦. (2认同)
  • @ChrisPratt麻烦是要求我的老板每个月再花200美元运行一个新的AzureVM来设置一个不同的环境变量;-)并非所有的开发人员都有无限的资源(或者是严格的分段发布时间). (2认同)