Asp.net-Core-2.0

為每個環境部署不同的連接字元串

  • December 2, 2017

我正在嘗試從 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 命令部分。

這讓我可以為每個應用程序池設置不同的環境

該文件不適用於舊版本的 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.

引用自:https://stackoverflow.com/questions/47592335