

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過部署資訊清單執行多個應用程式和 ASP.NET 核心應用程式
<a name="dotnet-manifest"></a>

您可使用部署資訊清單來指示 Elastic Beanstalk 如何部署您的應用程式。使用這個方法，您不需要用 `MSDeploy` 來產生在網站根路徑執行的單一 ASP.NET 應用程式的原始碼套件。相反地，您可以使用資訊清單檔案，在不同的路徑上執行多個應用程式。或者，您也可以告訴 Elastic Beanstalk 用 ASP.NET Core 部署和執行應用程式。您亦可使用部署資訊清單來設定應用程式集區，在其中執行您的應用程式。

部署資訊清單會將 [.NET Core 應用程式](#dotnet-manifest-dotnetcore)適用的支援新增至 Elastic Beanstalk。您可以部署沒有部署資訊清單的 .NET Framework 應用程式。不過，.NET Core 應用程式需要部署資訊清單，才能在 Elastic Beanstalk 上執行。使用部署資訊清單時，請為每個應用程式建立網站封存檔，然後將此封存檔納入內含部署資訊清單的第二個 ZIP 封存檔。

部署資訊清單亦增加[執行不同路徑的多個應用程式](#dotnet-manifest-multiapp)的能力。部署資訊清單會定義一系列部署目標，每個目標都有網站封存檔與 IIS 應執行資訊清單的路徑。例如，您可於 `/api` 路徑執行 Web API 處理非同步請求，並於使用 API 的根路徑執行 Web 應用程式。

您可以使用部署資訊清單來[設定具有自訂繫結和實體路徑的 IIS 網站](#dotnet-manifest-websites)。這可讓您設定網站，在部署應用程式之前接聽特定連接埠或主機名稱。

您也可以使用部署資訊清單來[使用 IIS 或 Kestrel 中的應用程式集區執行多個應用程式](#dotnet-manifest-apppool)。您可將應用程式集區設定為定期重新啟動您的應用程式、執行 32 位元應用程式，或使用特定版本的 .NET Framework 執行時間。

如需完整自訂功能，您可於 Windows PowerShell [自行撰寫部署指令碼](#dotnet-manifest-custom)，並指示 Elastic Beanstalk 安裝、解除安裝和重新啟動應用程式所需執行的指令碼。

部署資訊清單和相關功能需要 Windows Server 平台 [1.2.0 版或更新版本](dotnet-v2migration.md)。

如需略過 IIS 重設等所有可用組態選項、屬性和進階功能的詳細資訊，請參閱[部署資訊清單結構描述參考](dotnet-manifest-schema.md)。

**Topics**
+ [.NET Core 應用程式](#dotnet-manifest-dotnetcore)
+ [執行多個應用程式](#dotnet-manifest-multiapp)
+ [設定 IIS 網站](#dotnet-manifest-websites)
+ [使用應用程式請求路由 (ARR)](#dotnet-manifest-arr)
+ [設定應用程式集區](#dotnet-manifest-apppool)
+ [定義自訂部署](#dotnet-manifest-custom)
+ [部署資訊清單結構描述參考](dotnet-manifest-schema.md)

## .NET Core 應用程式
<a name="dotnet-manifest-dotnetcore"></a>

您可使用部署資訊清單，在 Elastic Beanstalk 上執行 .NET Core 應用程式。.NET Core 是跨平台版本的 .NET，隨附命令列工具 (`dotnet`)。您可以使用它來產生應用程式、在本機執行，並準備發佈。

欲於 Elastic Beanstalk 上執行 .NET Core 應用程式，您可以執行 `dotnet publish` 並將輸出納入 ZIP 封存檔，且不要納入任何其中的目錄。請將網站封存檔與具備類型為 `aspNetCoreWeb` 之部署目標的部署資訊清單，一同放置於原始碼套件。

下列部署資訊清單於根路徑執行的 .NET 核心應用程式，來自名為 `dotnet-core-app.zip` 的網站封存檔。

**Example aws-windows-deployment-manifest.json - .NET core**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

將資訊清單和網站封存檔打包至 ZIP 封存檔來建立原始碼套件。

**Example dotnet-core-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
`-- dotnet-core-app.zip
```

網站封存檔內含編譯的應用程式程式碼、依存項目和 `web.config` 檔案。

**Example dotnet-core-app.zip**  

```
.
|-- Microsoft.AspNetCore.Hosting.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
|-- Microsoft.AspNetCore.Hosting.dll
|-- Microsoft.AspNetCore.Http.Abstractions.dll
|-- Microsoft.AspNetCore.Http.Extensions.dll
|-- Microsoft.AspNetCore.Http.Features.dll
|-- Microsoft.AspNetCore.Http.dll
|-- Microsoft.AspNetCore.HttpOverrides.dll
|-- Microsoft.AspNetCore.Server.IISIntegration.dll
|-- Microsoft.AspNetCore.Server.Kestrel.dll
|-- Microsoft.AspNetCore.WebUtilities.dll
|-- Microsoft.Extensions.Configuration.Abstractions.dll
|-- Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|-- Microsoft.Extensions.Configuration.dll
|-- Microsoft.Extensions.DependencyInjection.Abstractions.dll
|-- Microsoft.Extensions.DependencyInjection.dll
|-- Microsoft.Extensions.FileProviders.Abstractions.dll
|-- Microsoft.Extensions.FileProviders.Physical.dll
|-- Microsoft.Extensions.FileSystemGlobbing.dll
|-- Microsoft.Extensions.Logging.Abstractions.dll
|-- Microsoft.Extensions.Logging.dll
|-- Microsoft.Extensions.ObjectPool.dll
|-- Microsoft.Extensions.Options.dll
|-- Microsoft.Extensions.PlatformAbstractions.dll
|-- Microsoft.Extensions.Primitives.dll
|-- Microsoft.Net.Http.Headers.dll
|-- System.Diagnostics.Contracts.dll
|-- System.Net.WebSockets.dll
|-- System.Text.Encodings.Web.dll
|-- dotnet-core-app.deps.json
|-- dotnet-core-app.dll
|-- dotnet-core-app.pdb
|-- dotnet-core-app.runtimeconfig.json
`-- web.config
```

## 執行多個應用程式
<a name="dotnet-manifest-multiapp"></a>

您可定義多個部署目標，藉此透過部署資訊清單執行多個應用程式。

以下部署資訊清單設定兩個 .NET Core 應用程式。`WebApiSampleApp` 應用程式實作簡單的 Web API，並在`/api`路徑上提供非同步請求。`DotNetSampleApp` 應用程式是一種 Web 應用程式，其在根路徑處理請求。

**Example aws-windows-deployment-manifest.json - 多個應用程式**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "WebAPISample",
        "parameters": {
          "appBundle": "WebApiSampleApp.zip",
          "iisPath": "/api"
        }
      },
      {
        "name": "DotNetSample",
        "parameters": {
          "appBundle": "DotNetSampleApp.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

此處提供具備多個應用程式的範例應用程式：
+ **可部署原始碼套件** - [dotnet-multiapp-sample-bundle-v2.zip](samples/dotnet-multiapp-sample-bundle-v2.zip)
+ **原始碼** - [dotnet-multiapp-sample-source-v2.zip](samples/dotnet-multiapp-sample-source-v2.zip)

## 設定 IIS 網站
<a name="dotnet-manifest-websites"></a>

您可以使用部署資訊清單，使用自訂繫結和實體路徑來設定 IIS 網站。當您需要設定在特定連接埠上接聽、使用自訂主機名稱或提供特定目錄內容的網站時，此功能非常有用。

下列部署資訊清單會設定使用特定連接埠號碼和自訂實體路徑在 HTTP 上監聽的自訂 IIS 網站：

**Example aws-windows-deployment-manifest.json - IIS 網站組態**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "appBundle": "dotnet-core-app.zip",
          "iisWebSite": "MyCustomSite",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

在此範例中：
+ 使用自訂實體路徑建立名為 "MyCustomSite" 的網站
+ 網站在連接埠 8080 上具有具有特定主機名稱的 HTTP 繫結
+ 使用 `iisWebSite` 參數將 ASP.NET Core 應用程式部署到此自訂網站

## 使用應用程式請求路由 (ARR)
<a name="dotnet-manifest-arr"></a>

應用程式請求路由 (ARR) 和 URL 重寫模組已預先安裝，並可在 Elastic Beanstalk Windows AMIs 中使用。這些模組使用 ebextensions 或應用程式組態，透過 IIS 組態啟用進階路由案例和 URL 操作。

下列範例顯示簡單的部署資訊清單，其中設定具有自訂連接埠的網站，並結合設定基本 ARR 路由的 ebextensions 組態：

**Example aws-windows-deployment-manifest.json - 簡易 ARR 設定**  

```
{
  "manifestVersion": 1,
  "iisConfig": {
    "websites": [
      {
        "name": "ARRSite",
        "physicalPath": "C:\\inetpub\\wwwroot\\arrsite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "localhost"
          }
        ]
      }
    ]
  },
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "BackendApp",
        "parameters": {
          "appBundle": "backend-app.zip",
          "iisWebSite": "ARRSite",
          "iisPath": "/backend"
        }
      }
    ]
  }
}
```

ARR 組態是透過 ebextensions 完成。下列組態會設定基本 ARR 路由規則：

**Example .ebextensions/arr-config.config - 基本 ARR 組態**  

```
files:
  "C:\\temp\\configure-arr.ps1":
    content: |
      # Enable ARR proxy at server level
      Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
      
      # Clear any existing global rules to avoid conflicts
      Clear-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/rewrite/globalRules'

      # Add global rule to route all requests to backend
      Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
        -Filter 'system.webServer/rewrite/globalRules' `
        -Name '.' `
        -Value @{
          name = 'Route_to_Backend'
          stopProcessing = 'True'
          match = @{ url = '^(?!backend/)(.*)' }
          action = @{
            type = 'Rewrite'
            url = 'http://localhost:8080/backend/{R:1}'
          }
        }

container_commands:
  01_configure_arr:
    command: powershell -ExecutionPolicy Bypass -File "C:\\temp\\configure-arr.ps1"
    waitAfterCompletion: 0
```

此組態會在連接埠 8080 上建立網站，並設定 ARR 將所有傳入請求路由到在該網站上執行的後端應用程式。

## 設定應用程式集區
<a name="dotnet-manifest-apppool"></a>

您可以在 Windows 環境中支援多個應用程式。可採用兩種方法：
+ 您可以使用 Kestrel Web 伺服器的進程外託管模型。使用此模型，您可以將多個應用程式設定為在一個應用程式集區中執行。
+ 您可以使用進程內託管模型。憑藉此模型，您可以使用多個應用程式集區來執行多個應用程式，且每個集區中只有一個應用程式。如果您使用的是 IIS 伺服器，並且需要執行多個應用程式，則必須使用此方法。

若要設定 Kestrel 在一個應用程式集區中執行多個應用程式，請新增 `hostingModel="OutofProcess"` 檔案中的 `web.config`。請考慮下列範例。

**Example web.config - 用於 Kestrel 進程外託管模型**  

```
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add 
    name="aspNetCore" 
    path="*" verb="*" 
    modules="AspNetCoreModuleV2" 
    resourceType="Unspecified" />
</handlers>
<aspNetCore 
    processPath="dotnet" 
    arguments=".\CoreWebApp-5-0.dll" 
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" 
    hostingModel="OutofProcess" />
</system.webServer>
</location>
</configuration>
```

**Example aws-windows-deployment-manifest.json - 多個應用程式**  

```
{
"manifestVersion": 1,
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {"archive": "site1.zip",
          "iisPath": "/"
        }
      },
      {"name": "Web-app2",
        "parameters": {"archive": "site2.zip",
          "iisPath": "/app2"
        }
      }
    ]
  }
}
```

IIS 不支援一個應用程式集區中有多個應用程式，因為其使用進程內託管模型。因此，您需要透過將每個應用程式指派給一個應用程式集區，來設定多個應用程式。換句話說，只將一個應用程式指派給一個應用程式集區。

您可以將 IIS 設定為在 `aws-windows-deployment-manifest.json` 檔案中使用不同的應用程式集區。在您參考下一個範例檔案時，請進行下列更新：
+ 新增包含名稱為 `iisConfig` 子區段的 `appPools` 區段。
+ 在 `appPools` 區塊中，列出應用程式集區。
+ 在 `deployments` 區段中，為每個應用程式定義 `parameters` 區段。
+ 針對每個應用程式，`parameters` 區段會指定封存檔、執行它的路徑，以及要在其中執行的 `appPool`。

下列部署資訊清單會設定每 10 分鐘重新啟動應用程式的兩個應用程式集區。它們還將其應用程式附加到在指定路徑上執行的 .NET Framework Web 應用程式。

**Example aws-windows-deployment-manifest.json - 每個應用程式集區一個應用程式**  

```
{
"manifestVersion": 1,
  "iisConfig": {"appPools": [
      {"name": "MyFirstPool",
       "recycling": {"regularTimeInterval": 10}
      },
      {"name": "MySecondPool",
       "recycling": {"regularTimeInterval": 10}
      }
     ]
    },
  "deployments": {"msDeploy": [
      {"name": "Web-app1",
        "parameters": {
           "archive": "site1.zip",
           "iisPath": "/",
           "appPool": "MyFirstPool"
           }
      },
      {"name": "Web-app2",
        "parameters": {
           "archive": "site2.zip",
           "iisPath": "/app2",
           "appPool": "MySecondPool"
          }
      }
     ]
    }
}
```

## 定義自訂部署
<a name="dotnet-manifest-custom"></a>

如需進一步控制，您可定義*自訂部署*，藉此完全自訂應用程式部署。

此部署資訊清單會指示 Elastic Beanstalk 在 32 位元模式中執行 PowerShell 指令碼。它指定三個指令碼：在執行個體啟動和部署期間執行的`install`指令碼 (`siteInstall.ps1`)、在部署期間安裝新版本之前執行的`uninstall`指令碼 (`siteUninstall.ps1`)，以及當您在 AWS 管理主控台中選取[重新啟動應用程式伺服器](environments-dashboard-actions.md)時執行的`restart`指令碼 (`siteRestart.ps1`)。

**Example aws-windows-deployment-manifest.json - 自訂部署**  

```
{
  "manifestVersion": 1,
  "deployments": {
    "custom": [
      {
        "name": "Custom site",
        "architecture" : 32,
        "scripts": {
          "install": {
            "file": "siteInstall.ps1"
          },
          "restart": {
            "file": "siteRestart.ps1"
          },
          "uninstall": {
            "file": "siteUninstall.ps1"
          }
        }
      }
    ]
  }
}
```

將執行應用程式所需的成品納入具備資訊清單和指令碼的原始碼套件。

**Example Custom-site-bundle.zip**  

```
.
|-- aws-windows-deployment-manifest.json
|-- siteInstall.ps1
|-- siteRestart.ps1
|-- siteUninstall.ps1
`-- site-contents.zip
```

# 部署資訊清單結構描述參考
<a name="dotnet-manifest-schema"></a>

部署資訊清單是 JSON 檔案，定義 Elastic Beanstalk 應如何部署和設定您的 Windows 應用程式。本節提供資訊清單結構描述中所有支援屬性和組態選項的完整參考。

## 資訊清單結構
<a name="dotnet-manifest-schema-structure"></a>

部署資訊清單遵循具有下列最上層結構的特定 JSON 結構描述：

**Example 基本資訊清單結構**  

```
{
  "manifestVersion": 1,
  "skipIISReset": false,
  "iisConfig": {
    "websites": [...],
    "appPools": [...]
  },
  "deployments": {
    "msDeploy": [...],
    "aspNetCoreWeb": [...],
    "custom": [...]
  }
}
```

### 最上層屬性
<a name="dotnet-manifest-schema-top-level"></a>

`manifestVersion` (必要)  
*類型*：數字  
*預設值*：1  
*有效值：*1  
指定資訊清單結構描述的版本。目前僅支援第 1 版。

`skipIISReset` (選用)  
*類型*：布林值  
*預設：*false  
控制 IIS 是否在應用程式部署期間重設。此旗標同時影響 `msDeploy`和 `aspNetCoreWeb` 部署類型。  
*行為：*  
+ *未指定 或 `false`（預設）：*IIS 重設會在安裝、解除安裝和更新操作期間執行。這是傳統行為。
+ *`true`：*部署操作期間會略過 IIS 重設。
*優點：*  
+ *減少停機時間* – 應用程式在部署期間遇到較短的服務中斷。
+ *更快速的部署* – 消除 IIS 完全重新啟動並重新初始化所需的時間。
使用 時`skipIISReset`， [RestartAppServer](https://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_RestartAppServer.html) 操作會執行 IIS 重設，無論此旗標設定為何。
*範例*：  

```
{
  "manifestVersion": 1,
  "skipIISReset": true,
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "my-dotnet-core-app",
        "parameters": {
          "archive": "dotnet-core-app.zip",
          "iisPath": "/"
        }
      }
    ]
  }
}
```

`deployments` (必要)  
*類型：*物件  
包含您應用程式的部署組態。此物件可以包含 `msDeploy`、 `aspNetCoreWeb`和 `custom` 部署類型。

`iisConfig` (選用)  
*類型：*物件  
在部署應用程式之前，定義要套用的 IIS 組態設定。同時支援網站和應用程式集區組態。

## IIS 組態
<a name="dotnet-manifest-schema-iis-config"></a>

`iisConfig` 本節可讓您在部署應用程式之前設定 IIS 設定。這包括使用特定組態設定應用程式集區，以及使用自訂繫結設定 IIS 網站。

### IIS 網站
<a name="dotnet-manifest-schema-websites"></a>

IIS 網站可讓您在部署應用程式之前設定自訂網站設定，包括實體路徑和網路繫結。

**建立不同 IIS 網站的重要考量事項**  
*網站設定順序：*網站會依顯示在`websites`陣列中的順序依序設定。平台會依序處理每個網站組態，因此如果您在網站之間有相依性，請務必正確排序。
*防火牆和連接埠存取：*只有連接埠 80 會透過預設 Elastic Beanstalk Windows 防火牆組態自動公開。如果您將網站設定為使用非標準連接埠，則必須透過 ebextensions 或自訂部署指令碼定義自訂防火牆規則，以允許外部存取這些連接埠。

**Example 網站組態**  

```
{
  "iisConfig": {
    "websites": [
      {
        "name": "MyCustomSite",
        "physicalPath": "C:\inetpub\wwwroot\mysite",
        "bindings": [
          {
            "protocol": "http",
            "port": 8080,
            "hostName": "mysite.local"
          },
          {
            "protocol": "https",
            "port": 8443
          }
        ]
      }
    ]
  }
}
```網站屬性

`name` (必要)  
*類型：*字串  
IIS 網站的名稱。此名稱用於識別 IIS Manager 中的網站，而且在 IIS 組態中必須是唯一的。

`physicalPath` (必要)  
*類型：*字串  
存放網站檔案之伺服器上的實體路徑。此路徑必須可供 IIS 工作者程序存取。

`bindings` (必要)  
*類型*：陣列  
*最少項目：*1  
一系列繫結組態，定義網站如何回應網路請求。每個繫結都會指定通訊協定、連接埠和選用主機名稱。

#### 網站繫結
<a name="dotnet-manifest-schema-bindings"></a>

網站繫結定義 IIS 網站接聽傳入請求的網路端點。

`protocol` (必要)  
*類型：*字串  
*有效值：*"http"、"https"  
用於繫結的通訊協定。

`port` (必要)  
*類型*：整數  
*有效範圍：*1-65535  
網站將接聽請求的連接埠號碼。

`hostName` (選用)  
*類型：*字串  
繫結的主機名稱 （網域名稱）。

### 應用程式集區
<a name="dotnet-manifest-schema-app-pools"></a>

應用程式集區可在應用程式之間提供隔離，並可讓您設定應用程式群組的執行時間設定。

**Example 應用程式集區組態**  

```
{
  "iisConfig": {
    "appPools": [
      {
        "name": "MyAppPool",
        "enable32Bit": false,
        "managedPipelineMode": "Integrated",
        "managedRuntimeVersion": "v4.0",
        "queueLength": 1000,
        "cpu": {
          "limitPercentage": 80,
          "limitAction": "Throttle",
          "limitMonitoringInterval": 5
        },
        "recycling": {
          "regularTimeInterval": 1440,
          "requestLimit": 10000,
          "memory": 1048576,
          "privateMemory": 524288
        }
      }
    ]
  }
}
```應用程式集區屬性

`name` (必要)  
*類型：*字串  
應用程式集區的名稱。此名稱用於參考部署組態中的集區。

`enable32Bit` (選用)  
*類型*：布林值  
讓 32 位元應用程式在 64 位元版本的 Windows 上執行。對於需要 32 位元相容性的舊版應用程式，`true`請將 設定為 。

`managedPipelineMode` (選用)  
*類型：*字串  
*有效值：*"Integrated"、"Classic"  
指定應用程式集區的請求處理模式。

`managedRuntimeVersion` (選用)  
*類型：*字串  
*有效值：*「無受管程式碼」、「v2.0」、「v4.0」  
指定應用程式集區的 .NET Framework 版本。

`queueLength` (選用)  
*類型*：整數  
拒絕其他請求之前，HTTP.sys 佇列的應用程式集區的請求數目上限。

#### CPU 組態
<a name="dotnet-manifest-schema-cpu-config"></a>

`cpu` 物件會設定應用程式集區的 CPU 用量限制和監控。

`limitPercentage` (選用)  
*類型*：數字  
應用程式集區中的工作者程序可以使用的 CPU 時間百分比上限。

`limitAction` (選用)  
*類型：*字串  
*有效值：*"NoAction"、"KillW3wp"、"Throttle"、"ThrottleUnderLoad"  
達到 CPU 限制時要採取的動作。

`limitMonitoringInterval` (選用)  
*類型*：數字  
重設 CPU 監控和限流限制的期間 （以分鐘為單位）。

#### 回收組態
<a name="dotnet-manifest-schema-recycling-config"></a>

`recycling` 物件會設定應用程式集區工作者程序的回收時間和方式。

`regularTimeInterval` (選用)  
*類型*：整數  
應用程式集區回收的時間間隔 （以分鐘為單位）。設為 0 可停用以時間為基礎的回收。

`requestLimit` (選用)  
*類型*：整數  
應用程式集區在回收之前處理的請求數量上限。

`memory` (選用)  
*類型*：整數  
觸發工作者程序回收的虛擬記憶體數量 （以 KB 為單位）。

`privateMemory` (選用)  
*類型*：整數  
觸發工作者程序回收的私有記憶體數量 （以 KB 為單位）。

## 部署類型
<a name="dotnet-manifest-schema-deployments"></a>

`deployments` 物件包含不同應用程式類型的部署組態陣列。每個部署類型都有特定的屬性和使用案例。

### MSDeploy 部署
<a name="dotnet-manifest-schema-msdeploy"></a>

MSDeploy 部署用於可使用 Web 部署 (MSDeploy) 部署的傳統 .NET Framework 應用程式。

**Example MSDeploy 部署組態**  

```
{
  "deployments": {
    "msDeploy": [
      {
        "name": "WebApp",
        "description": "Main web application",
        "parameters": {
          "appBundle": "webapp.zip",
          "iisPath": "/",
          "appPool": "DefaultAppPool"
        }
      }
    ]
  }
}
```MSDeploy 部署屬性

`name` (必要)  
*類型：*字串  
部署的唯一名稱。此名稱在資訊清單中的所有部署中必須是唯一的。

`description` (選用)  
*類型：*字串  
部署的人類可讀描述。

`parameters` (必要)  
*類型：*物件  
MSDeploy 操作的組態參數。

`scripts` (選用)  
*類型：*物件  
要在部署生命週期的各個階段執行的 PowerShell 指令碼。

#### MSDeploy 參數
<a name="dotnet-manifest-schema-msdeploy-parameters"></a>

`appBundle` (必要)  
*類型：*字串  
相對於資訊清單檔案的應用程式套件 (ZIP 檔案） 路徑。此套件包含要部署的應用程式檔案。

`iisWebSite` (選用)  
*類型：*字串  
*預設：*「預設網站」  
要部署應用程式的 IIS 網站。根據預設，應用程式會部署到「預設網站」。或者，您可以指定不同的網站名稱，例如在 `iisConfig.websites`區段中設定的網站名稱。

`iisPath` (選用)  
*類型：*字串  
*預設：*"/"  
IIS 中的虛擬目錄路徑，其中將部署應用程式。將 "/" 用於根路徑，或將 "/api" 用於子目錄。

`appPool` (選用)  
*類型：*字串  
執行此應用程式的應用程式集區名稱。

### ASP.NET Core 部署
<a name="dotnet-manifest-schema-aspnetcore"></a>

ASP.NET Core 部署專為 .NET Core 和 .NET 5\$1 應用程式而設計。

**Example ASP.NET Core 部署組態**  

```
{
  "deployments": {
    "aspNetCoreWeb": [
      {
        "name": "CoreAPI",
        "description": "ASP.NET Core Web API",
        "parameters": {
          "appBundle": "coreapi.zip",
          "iisPath": "/api",
          "appPool": "CoreAppPool"
        }
      }
    ]
  }
}
```

ASP.NET Core 部署使用與 MSDeploy 部署相同的屬性結構，主要差異在於用於應用程式的執行期環境和託管模型。ASP.NET Core 部署參數

`appBundle` (必要)  
*類型：*字串  
相對於資訊清單檔案的應用程式套件路徑。這可以是 ZIP 封存檔或包含已發佈 ASP.NET Core 應用程式的目錄路徑。

`iisWebSite` (選用)  
*類型：*字串  
*預設：*「預設網站」  
要部署 ASP.NET Core 應用程式的 IIS 網站。根據預設，應用程式會部署到「預設網站」。或者，您可以指定不同的網站名稱，例如在 `iisConfig.websites`區段中設定的網站名稱。

`iisPath` (選用)  
*類型：*字串  
*預設：*"/"  
ASP.NET Core 應用程式的 IIS 虛擬目錄路徑。

`appPool` (選用)  
*類型：*字串  
ASP.NET Core 應用程式的應用程式集區。集區將針對 ASP.NET Core 託管進行適當設定。

### 自訂部署
<a name="dotnet-manifest-schema-custom"></a>

自訂部署可透過 PowerShell 指令碼完整控制部署程序。此部署類型適用於需要自訂安裝、組態或部署邏輯的複雜案例。

**Example 自訂部署組態**  

```
{
  "deployments": {
    "custom": [
      {
        "name": "CustomService",
        "description": "Custom Windows service deployment",
        "architecture": 32,
        "scripts": {
          "install": {
            "file": "install-service.ps1"
          },
          "restart": {
            "file": "restart-service.ps1"
          },
          "uninstall": {
            "file": "uninstall-service.ps1",
            "ignoreErrors": true
          }
        }
      }
    ]
  }
}
```自訂部署屬性

`name` (必要)  
*類型：*字串  
自訂部署的唯一名稱。

`description` (選用)  
*類型：*字串  
自訂部署的說明。

`architecture` (選用)  
*類型*：整數  
*預設：*32  
*有效值：*32、64  
powershell 指令碼執行模式的架構規格

`scripts` (必要)  
*類型：*物件  
定義部署行為的 PowerShell 指令碼。相較於其他部署類型，自訂部署支援其他指令碼類型。

## 部署指令碼
<a name="dotnet-manifest-schema-scripts"></a>

部署指令碼是在部署生命週期內特定時間點執行的 PowerShell 指令碼。不同的部署類型支援不同的指令碼事件集。

### 指令碼事件
<a name="dotnet-manifest-schema-script-events"></a>

視部署類型而定，可使用下列指令碼事件：標準部署指令碼 (msDeploy 和 aspNetCoreWeb)

`preInstall`  
在安裝或更新應用程式之前執行。

`postInstall`  
在應用程式安裝或更新後執行。

`preRestart`  
在應用程式重新啟動之前執行。

`postRestart`  
重新啟動應用程式後執行。

`preUninstall`  
在解除安裝應用程式之前執行。

`postUninstall`  
解除安裝應用程式後執行。自訂部署指令碼 （僅限自訂部署）

`install`  
自訂部署的主要安裝指令碼。此指令碼負責安裝應用程式或服務。

`restart`  
用來重新啟動應用程式或服務的指令碼。環境重新啟動時呼叫。

`uninstall`  
解除安裝應用程式或服務的指令碼。在環境終止或應用程式移除期間呼叫。

### 指令碼屬性
<a name="dotnet-manifest-schema-script-properties"></a>

每個指令碼都定義為具有下列屬性的物件：

`file` (必要)  
*類型：*字串  
相對於資訊清單檔案的 PowerShell 指令碼檔案路徑。指令碼應該有`.ps1`副檔名。

`ignoreErrors` (選用)  
*類型*：布林值  
*預設：*false  
設為 時`true`，即使指令碼失敗，部署仍會繼續。將此用於非關鍵指令碼或清除操作。

**Example 指令碼組態範例**  

```
{
  "scripts": {
    "preInstall": {
      "file": "backup-config.ps1",
      "ignoreErrors": true
    },
    "postInstall": {
      "file": "configure-app.ps1"
    }
  }
}
```