我正在尝试从Mac上部署IIS上的ASP.NET Core 2.0 API项目。
我想做的是为我的开发,分期和生产环境设置不同的appsettings.json文件,然后用dotnet -build调用我部署脚本的一部分来调用不同的环境。
我已经查看了https://learn.microsoft.com/en-us/aspnet/core/fundamentals/envillirnments,它适用于较旧版本的.net core,我无法掌握我的头脑需要做。我不想为操作系统设置环境,而是想通过编程设置(因为我的登台和生产环境适用于同一服务器)
我有一个appsettings.development.json文件,该文件在我运行应用程序时已使用,但是当简单地将环境变量设置为构建命令的一部分时,我似乎无法将我的appSettings.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。那里的一切仍然适用,这一切都是布置的,所以我不确定这些混乱来自这里的何处。
最简单的形式,您只需创建一个或多个appsettings.{environment}.json
文件即可。默认情况下,首先加载appsettings.json
,然后如果存在,则加载了与当前环境匹配的appsettings.{environment}.json
文件。这使您可以从主要appsettings.json
文件(专门针对环境)覆盖设置。但是,更好的方法是仅放置不受appsettings.json
环境影响的全局设置,然后将所有特定环境设置留在特定于环境的文件中。
无论哪种情况,当您部署应用程序时,所有设置文件均已复制。ASP.NET核心项目未根据特定的配置(如较旧的ASP.NET项目)发布。这意味着可以在多个不同的环境中部署相同的发布的文件,而无需重新发布。
运行时使用的环境由ASPNETCORE_ENVIRONMENT
环境变量的值确定。只需在服务器上将其设置为应该是什么,您就可以了。
如果您在IIS后面跑步,则需要再迈出一步。默认情况下,应用程序池不会加载环境变量。您可以通过编辑IIS中应用程序池的高级属性并将"加载用户配置文件"更改为true
。