11

我正在尝试从 mac 在 IIS 上部署一个 asp.net core 2.0 api 项目。

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

我查看了适用于旧版本 .net 核心的https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments,但我无法理解我需要做什么. 我不想为操作系统设置环境,而是以编程方式设置它(因为我的登台和生产环境用于同一台服务器)

我有一个 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 命令部分。

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

4

1 回答 1

16

该文档不适用于旧版本的 ASP.NET Core。那里的一切仍然适用,而且都已经布置好了,所以我不确定究竟是从哪里来的混乱。

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

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

运行时使用的环境由ASPNETCORE_ENVIRONMENT环境变量的值决定。只需在服务器上将其设置为应有的值,就可以了。

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

于 2017-12-01T13:48:26.860 回答