將 ASP.NET Core 應用程式部署至 Azure App Service

Azure App ServiceMicrosoft 雲端運算平台服務,用於裝載 Web 應用程式,包括 ASP.NET Core。

可靠的 Web 應用程式模式

請參閱適用於 .NET 可靠的 Web 應用程式模式YouTube 影片 (英文) 和文章,以取得建立新式、可靠、高效能、可測試、符合成本效益且可調整 ASP.NET Core 應用程式 (無論是從頭開始還是重構現有應用程式) 的指導。

實用資源

App Service 文件是 Azure 應用程式文件、教學課程、範例、使用說明指南與其他資源的首頁。 關於裝載 ASP.NET Core 應用程式,有兩個值得參考的教學課程:

在 Azure 中建立 ASP.NET Core Web 應用程式
在 Windows 上使用 Visual Studio 建立 ASP.NET Core Web 應用程式並將其部署到 Azure App Service。

在 Linux 上的 App Service 中建立 ASP.NET Core 應用程式
在 Linux 上使用命令列建立 ASP.NET Core Web 應用程式並將其部署到 Azure App Service。

如需 Azure App Service 上可用的 ASP.NET Core 版本,請參閱 App Service 儀表板上的 ASP.NET Core

訂閱 App Service 公告存放庫並監視問題。 App Service 小組會定期張貼抵達 App Service 的公告和案例。

若要閱讀下列文章,請參閱 ASP.NET Core 文件:

使用 Visual Studio 將 ASP.NET Core 應用程式發行到 Azure
了解如何使用 Visual Studio 將 ASP.NET Core 應用程式發行到 Azure App Service。

建立您的第一個管線
設定 ASP.NET Core 應用程式的 CI 組建,然後建立連續部署發行至 Azure App Service。

Azure Web 應用程式沙箱
探索 Azure 應用程式平台強制實施的 Azure App Service 執行階段執行限制。

針對 ASP.NET Core 專案進行疑難排解和偵錯
了解 ASP.NET Core 專案的相關警告和錯誤,並為其進行疑難排解。

應用程式設定

平台

對於裝載於 A 系列計算 (基本) 或更高裝載層的應用程式,應用程式服務應用程式的平台架構 (x86/x64) 會設定在 Azure 入口網站中應用程式的設定內。 確認應用程式的發佈設定 (例如,在 Visual Studio 的發佈設定檔 (.pubxml)) 符合 Azure 入口網站中應用程式服務設定中的設定。

Azure App Service 具有 64 位元 (x64) 及 32 位元 (x86) 應用程式的執行階段。 App Service 提供的 .NET Core SDK 為 32 位元,但您可以使用 Kudu 主控台或 Visual Studio 中的發佈處理序,部署在本機建置的 64 位元應用程式。 如需詳細資訊,請參閱發佈與部署應用程式一節。

對於具有原生相依性的應用程式而言,Azure App Service 具有 32 位元 (x86) 應用程式的執行階段。 App Service 可使用的 .NET Core SDK 為 32 位元。

如需 .NET Core 架構元件與發佈方法的詳細資訊,例如 .NET Core 執行階段和 .NET Core SDK 的相關資訊,請參閱關於 .NET Core:組合

套件

包含下列 NuGet 套件,為部署至 Azure App Service 的應用程式提供自動記錄功能:

上述套件必須在應用程式的專案檔中明確參考。

使用 Azure 入口網站覆寫應用程式設定

Azure 入口網站中的應用程式設定允許您為應用程式設定環境變數。 環境變數可由環境變數設定提供者取用。

在 Azure 入口網站中建立或修改應用程式設定並選取 [儲存] 按鈕後,即會重新啟動 Azure 應用程式。 當服務重新啟動之後,環境變數便可供應用程式使用。

當應用程式使用一般主機時,系統會在呼叫 CreateDefaultBuilder 以建置主機時將環境變數載入到應用程式的設定。 如需詳細資訊,請參閱 ASP.NET Core 中的 .NET 一般主機環境變數設定提供者

Azure 入口網站中的應用程式設定允許您為應用程式設定環境變數。 環境變數可由環境變數設定提供者取用。

在 Azure 入口網站中建立或修改應用程式設定並選取 [儲存] 按鈕後,即會重新啟動 Azure 應用程式。 當服務重新啟動之後,環境變數便可供應用程式使用。

當應用程式使用 Web 主機時,系統會在呼叫 CreateDefaultBuilder 以建置主機時將環境變數載入到應用程式的設定。 如需詳細資訊,請參閱 ASP.NET Core Web 主機環境變數設定提供者

Proxy 伺服器和負載平衡器案例

IIS 整合中介軟體 (當裝載處理序外時會設定轉送標頭中介軟體) 與 ASP.NET Core 模組會設定為轉送配置 (HTTP/HTTPS) 與發出要求的遠端 IP 位址。 其他 Proxy 伺服器和負載平衡器後方託管的應用程式可能需要其他設定。 如需詳細資訊,請參閱設定 ASP.NET Core 以處理 Proxy 伺服器和負載平衡器

監視與記錄

部署到 App Service 的 ASP.NET Core 應用程式會自動接收 App Service 延伸模組:ASP.NET Core 記錄整合。 延伸模組讓 Azure App Service 上的 ASP.NET Core 應用程式得以進行記錄整合。

部署到 App Service 的 ASP.NET Core 應用程式會自動接收 App Service 延伸模組 ASP.NET Core 記錄延伸模組。 延伸模組讓 Azure App Service 上的 ASP.NET Core 應用程式得以進行記錄整合。

如需監視、記錄及疑難排解的資訊,請參閱下列文章:

監視 Azure App Service 中的應用程式
了解如何檢閱應用程式和 App Service 方案的配額和計量。

在 Azure App Service 中針對應用程式啟用診斷記錄
探索如何啟用及存取 HTTP 狀態碼、失敗要求和網頁伺服器活動的診斷記錄。

處理 ASP.NET Core 中的錯誤
了解處理 ASP.NET Core 應用程式錯誤的常見方法。

針對 Azure App Service 和 IIS 上的 ASP.NET Core 進行疑難排解
了解如何診斷使用 ASP.NET Core 應用程式部署 Azure App Service 的問題。

Azure App Service 與 IIS 搭配 ASP.NET Core 時的常見錯誤疑難排解
了解託管於 Azure App Service/IIS 之應用程式的常見部署組態錯誤,及疑難排解建議。

資料保護金鑰環及部署位置

資料保護金鑰保存至 %HOME%\ASP.NET\DataProtection-Keys 資料夾。 此資料夾使用網路儲存體進行保存,並會在裝載應用程式的所有電腦上同步。 金鑰待用時不受保護。 此資料夾對單一部署位置中應用程式的所有執行個體皆提供金鑰環。 各部署位置,例如預備和生產位置,不會共用金鑰環。

當在部署位置間交換時,使用資料保護的任何系統都將無法使用前一位置內的金鑰環,來解密儲存的資料。 ASP.NET Cookie 中介軟體使用資料保護來保護其 cookie。 這會導致使用標準 ASP.NET Cookie 中介軟體的應用程式將使用者登出。 至於非相依於位置的金鑰環解決方案,請使用外部金鑰環提供者,例如:

  • Azure Blob 儲存體
  • Azure Key Vault
  • SQL 存放區
  • Redis 快取

如需詳細資訊,請參閱 ASP.NET Core 中的金鑰儲存提供者

部署使用 .NET Core 預覽版的 ASP.NET Core 應用程式

若要部署使用 .NET Core 預覽版的應用程式,請參閱下列資源。 如果有執行階段可供使用,但 SDK 尚未安裝在 Azure App Service,也會使用這些方法。

如需 Azure App Service 上可用的 ASP.NET Core 版本,請參閱 App Service 儀表板上的 ASP.NET Core

若要了解如何選取適用於獨立式部署的 .NET SDK 版本,請參閱選取要使用的 .NET Core 版本

使用 Azure Pipelines 指定 .NET Core SDK 版本

使用 Azure App Service CI/CD 案例來設定 Azure DevOps 的持續整合組建。 建立 Azure DevOps 組建之後,選擇性地將組建設定為使用特定 SDK 版本。

指定 .NET Core SDK 版本

使用 App Service 部署中心建立 Azure DevOps 組建時,預設組件管線包含 RestoreBuildTestPublish 的步驟。 若要指定 SDK 版本,請選取 [代理程式作業] 清單中的 [新增 (+)] 按鈕,以新增步驟。 在搜尋列中搜尋 .NET Core SDK

Add the .NET Core SDK step

將步驟移至組建的第一個位置,讓後續步驟使用指定的 .NET Core SDK 版本。 指定 .NET Core SDK 的版本。 在此範例中,SDK 會設定為 3.0.100

Completed SDK step

若要發佈獨立式部署 (SCD),請在 Publish 步驟中設定 SCD,並提供執行階段識別碼 (RID)

Self-contained publish

部署獨立式預覽應用程式

以預覽執行階段為目標的獨立式部署 (SCD) 會在部署中包含預覽執行階段。

部署獨立式應用程式時:

請遵循部署獨立式應用程式一節。

將包含 Web 應用程式的 Docker 用於容器

的 Docker Hub https://hub.docker.com/_/microsoft-dotnet 包含最新的預覽 Docker 映像。 這些映像可用作為基底映像。 請使用映像,並以一般的方式將其部署至容器的 Web 應用程式。

安裝預覽網站延伸模組

如果您在使用預覽網站延伸模組時發生任何問題,請建立 dotnet/AspNetCore 問題

  1. 從 Azure 入口網站瀏覽至 App Service。
  2. 選取 Web 應用程式。
  3. 在搜尋方塊中鍵入 "ex" 來篩選 "Extensions",也可往下捲動管理工具的清單。
  4. 選取 [擴充功能]
  5. 選取新增
  6. 從清單選取 [ASP.NET Core {X.Y} ({x64|x86}) 執行階段] 延伸模組,其中 {X.Y} 是 ASP.NET Core 預覽版本,而 {x64|x86} 則指定平台。
  7. 選取 [確定] 以接受法律條款。
  8. 選取 [確定] 安裝延伸模組。

當作業完成後,會安裝最新的 .NET Core 預覽。 確認安裝:

  1. 選取 [進階工具]

  2. 在 [進階工具] 中選取 [移至]

  3. 選取 [偵錯主控台]>[PowerShell] 功能表項目。

  4. 在 PowerShell 提示執行下列命令。 在命令中使用 ASP.NET Core 執行階段版本取代 {X.Y},並以平台取代 {PLATFORM}

    Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.{PLATFORM}\
    

    當已安裝 x64 預覽執行階段時,此命令會傳回 True

注意

對於裝載於 A 系列計算 (基本) 或更高裝載層的應用程式,應用程式服務應用程式的平台架構 (x86/x64) 會設定在 Azure 入口網站中應用程式的設定內。 確認應用程式的發佈設定 (例如,在 Visual Studio 的發佈設定檔 (.pubxml)) 符合 Azure 入口網站中應用程式服務設定中的設定。

如果在同處理序模式中執行應用程式,且平台架構設定為適用於 64 位元 (x64),ASP.NET Core 模組會使用 64 位元預覽執行階段 (如果有)。 使用 Azure 入口網站安裝 ASP.NET Core {X.Y} (x64) 執行階段延伸模組。

在安裝 x64 預覽執行階段後,請在 Azure Kudu PowerShell 命令視窗中執行下列命令,以確認安裝。 在下列命令中使用 ASP.NET Core 執行階段版本取代 {X.Y}

Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64\

當已安裝 x64 預覽執行階段時,此命令會傳回 True

注意

ASP.NET Core 延伸模組可在 Azure 應用程式服務上提供適用於 ASP.NET Core 的其他功能,例如:提供 Azure 記錄。 若從 Visual Studio 部署,會自動安裝延伸模組。 若未安裝延伸模組,請為應用程式安裝。

搭配使用預覽網站延伸模組與 ARM 範本

如果您使用 ARM 範本來建立及部署應用程式,可以使用 Microsoft.Web/sites/siteextensions 資源類型將網站延伸模組新增至 Web 應用程式。 在下列範例中,我們會將 ASP.NET Core 5.0 (x64) 執行階段網站延伸模組 (AspNetCoreRuntime.5.0.x64) 新增至應用程式:

{
    ...
    "parameters": {
        "site_name": {
            "defaultValue": "{SITE NAME}",
            "type": "String"
        },
        ...
    },       
    ...
    "resources": [
        ...
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2018-11-01",
            "name": "[concat(parameters('site_name'), '/AspNetCoreRuntime.5.0.x64')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ]
        }
    ]
}
    

針對預留位置 {SITE NAME},請使用 Azure App Service 中的應用程式名稱 (例如,contoso)。

發佈及部署應用程式

若為 64 位元的部署:

  • 請使用 64 位元 .NET Core SDK 來建置 64 位元應用程式。
  • 在 App Service 的 [組態]>[一般設定] 中,將 [平台] 設為 [64 位元]。 應用程式必須使用基本或更高的服務方案,才能選擇平台位元。

部署依架構不同的應用程式

  1. 在 [方案總管] 中的專案上按一下滑鼠右鍵,然後選取 [發佈]。 或者,從 Visual Studio 工具列中選取 [建置]>[發佈 {應用程式名稱}]
  2. 在 [發佈] 對話方塊中,選取 [Azure]>[下一步]
  3. 選取 Azure 服務。
  4. 選取進階。 [發佈] 對話方塊隨即開啟。
  5. 選取 [資源群組] 和 [主控方案],或建立新的項目。
  6. 選取完成
  7. 在 [發佈] 頁面中:
    • 針對 [設定],選取手寫筆圖示 [編輯設定]
      • 確認已選取 [發行] 設定。
      • 在 [部署模式] 下拉式清單中,然後選取 [依架構不同]
      • 在 [目標執行階段] 下拉式清單中,選取所需的執行階段。 預設值為 win-x86
    • 若要在部署時移除其他檔案,請開啟 [檔案發佈選項] 並選取核取方塊,以移除目的地的其他檔案。
    • 選取 [儲存]。
    • 選取發行

部署獨立式應用程式

使用 Visual Studio 或 .NET Core CLI 來進行獨立式部署 (SCD)

  1. 在 [方案總管] 中的專案上按一下滑鼠右鍵,然後選取 [發佈]。 或者,從 Visual Studio 工具列中選取 [建置]>[發佈 {應用程式名稱}]
  2. 在 [發佈] 對話方塊中,選取 [Azure]>[下一步]
  3. 選取 Azure 服務。
  4. 選取進階。 [發佈] 對話方塊隨即開啟。
  5. 選取 [資源群組] 和 [主控方案],或建立新的項目。
  6. 選取完成
  7. 在 [發佈] 頁面中:
    • 針對 [設定],選取手寫筆圖示 [編輯設定]
      • 確認已選取 [發行] 設定。
      • 在 [部署模式] 下拉式清單中,選取 [獨立式]
      • 在 [目標執行階段] 下拉式清單中,選取所需的執行階段。 預設值為 win-x86
    • 若要在部署時移除其他檔案,請開啟 [檔案發佈選項] 並選取核取方塊,以移除目的地的其他檔案。
    • 選取 [儲存]。
    • 選取發行

通訊協定設定 (HTTPS)

安全通訊協定繫結可讓您指定透過 HTTPS 回應要求時要使用的憑證。 繫結需要針對特定主機名稱簽發的有效私密憑證 (.pfx)。 如需詳細資訊,請參閱教學課程:將現有的自訂 SSL 憑證繫結至 Azure App Service

轉換 web.config

如需在發佈時轉換 web.config (例如依據設定、設定檔或環境設定環境變數),請參閱轉換 web.config

其他資源

Windows Server 上的 Azure App Service 使用 Internet Information Services (IIS)。 前端的 Kestrel 和 YARP 會提供負載平衡器。 有關基礎 IIS 技術的主題如下: