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

问题描述 投票:6回答:1

我正在尝试从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.

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

更新

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

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

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

asp.net-core-2.0 asp.net-core-configuration
1个回答
8
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.