共用方式為


ASP.NET Web 應用程式專案部署常見問題集

本主題將回答有關如何部署 Web 應用程式專案的常見問題。

其中許多解答會指示您透過編輯專案檔來變更部署設定。 如需這項做法的詳細資訊,請參閱 HOW TO:編輯專案檔中的部署設定

此主題包括下列章節:

  • 我可以從部署中排除特定檔案或資料夾嗎?

  • 我可以調整 [輸出] 視窗中顯示有關封裝或發行進度的詳細資料量嗎?

  • 我可以部署資料庫的全文檢索目錄嗎?

  • 我可以在自訂部署指令碼中參考系統產生的資料庫物件嗎?

  • 我可以透過 HTTPS 使用遠端代理程式服務搭配單鍵發行嗎?

  • 我可以使用 Web Deploy tempAgent 提供者設定搭配單鍵發行嗎?

  • 如果我忘了做某件事而必須重新開始,是否能中斷封裝或發行?

  • 單鍵發行是否能針對封存目的建立套件?

  • 我可以指定每次建置方案時都應該建立套件嗎?

  • 我可以變更 Visual Studio 建立部署套件的預設位置嗎?

  • 我可以設定委派規則,讓開發人員能夠部署至開發用伺服器但無法變更 IIS 設定嗎?

  • 為什麼當我在部署期間執行自訂指令碼時出現 SQL 逾時錯誤?

  • 為什麼當我已安裝 ASP.NET 4 時又出現一則錯誤,表示需要安裝 ASP.NET 4?

  • 如何修正這項錯誤 - sitemanifest 的資料流資料... 的資料流資料?

  • 為什麼當部署嘗試執行 CREATE USER 或 CREATE ROLE 資料庫命令時卻失敗?

  • 我可以建立單一套件並且用它來部署至 IIS 6 和 IIS 7 嗎?

  • 如何部署使用 SQL Server Compact 的 ASP.NET Razor 專案?

  • 我可以在 Visual Studio 中使用 .publishsettings 檔案嗎?

我可以從部署中排除特定檔案或資料夾嗎?

您可以在 [封裝/發行 Web] 索引標籤上選取 [只有執行此應用程式必須的檔案] 或 [此專案中的所有檔案] 選項,藉以限制部署的檔案。 如果您選取了 [此專案中的所有檔案] 選項,就可以用滑鼠右鍵按一下 [方案總管] 中的檔案,然後選取 [從專案移除] 避免部署此檔案。

如果這些選項對您而言不夠彈性,請編輯專案檔,然後在適當的 PropertyGroup 項目中加入 ExcludeFilesFromDeployment 項目或 ExcludeFoldersFromDeployment 項目 (或這兩者)。 在每個項目中,您可以指定單一名稱,也可以指定多個以分號 (;) 隔開的名稱。 下列範例顯示偵錯組建組態的 PropertyGroup 項目:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
  <!-- Other settings -->
</PropertyGroup> 

回到頁首

我可以調整 [輸出] 視窗中顯示有關封裝或發行進度的詳細資料量嗎?

封裝和發行詳細等級是由決定 MSBuild 詳細資訊的相同 Visual Studio 設定所控制。 在主功能表中,依序選取 [工具] 和 [選項]。 在 [選項] 對話方塊中,展開 [專案和方案],然後選取 [建置並執行]。 接著,您會看見 [MSBuild 專案建置輸出詳細等級] 下拉式清單,而且您可以從該清單中選取下列其中一個選項:

  • 無訊息

  • 最小

  • 一般

  • 詳細

  • 診斷

這些選項會對應至當您從命令列執行 MSBuild 時可使用 /verbosity 或 /v 旗標設定的選項。 如需 MSBuild 命令列旗標的詳細資訊,請參閱 MSBuild 命令列參考

回到頁首

我可以部署資料庫的全文檢索目錄嗎?

根據預設,Visual Studio 針對部署自動產生的每個指令碼都會在交易中執行。 但是,部署全文檢索目錄的指令碼無法在交易中順利執行。 因此,Visual Studio 預設不會建立全文檢索目錄的指令碼。

若要變更部署,讓它包含全文檢索目錄,請編輯專案檔,並且進行下列變更:

  • 針對自動產生的指令碼,將 Source 項目的 Transacted 屬性設定為 False。

  • 針對自動產生的指令碼,將 PreSource 項目的 CopyAllFullTextCatalogs 屬性設定為 True。

回到頁首

我可以在自訂部署指令碼中參考系統產生的資料庫物件嗎?

根據預設,當您指定 Visual Studio 應該自動產生指令碼來部署資料庫結構時,系統就會在目的資料庫中產生系統產生之物件 (例如條件約束) 的新名稱。 如果您撰寫自訂指令碼來修改或卸除其中一個物件,而且您在來源資料庫中指定了針對該物件所產生的名稱,當指令碼在目的資料庫中執行時可能會失敗。

您可以指定系統產生的物件名稱在目的資料庫與來源資料庫中都應該相同。 若要這樣做,請編輯專案檔,並且針對自動產生的指令碼,將下列屬性加入至 PreSource 項目:

DriIncludeSystemNames="True"

回到頁首

我可以透過 HTTPS 使用遠端代理程式服務搭配單鍵發行嗎?

否。 當您在 [發行 Web] 對話方塊的 [服務 URL] 文字方塊中輸入 HTTPS URL 時,Visual Studio 就會自動使用 Windows 管理服務。 如果您想要使用 HTTPS,我們建議您使用 Windows 管理服務。

回到頁首

我可以使用 Web Deploy tempAgent 提供者設定搭配單鍵發行嗎?

否。 如果您想要使用 tempAgent 提供者設定,就必須使用 Web 部署 命令列或是 Visual Studio 在建立部署套件時產生的 deploy.cmd 檔案。

回到頁首

如果我忘了做某件事而必須重新開始,是否能中斷封裝或發行?

是。 請按下 CTRL-BREAK。 封裝或發行程序將會停止。 當您重新開始時,Visual Studio 會從中斷之處開始,而不會重做已經完成的任何工作。

回到頁首

單鍵發行是否能針對封存目的建立套件?

是。 請編輯專案檔,然後在適當的 PropertyGroup 項目中加入 CreatePackageOnPublish 項目,如下列範例所示:

<CreatePackageOnPublish>True</CreatePackageOnPublish>

回到頁首

我可以指定每次建置方案時都應該建立套件嗎?

是。 請編輯專案檔,然後在適當的 PropertyGroup 項目中加入 DeployOnBuild 項目。 下列範例顯示發行組建組態的 PropertyGroup 項目:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DeployOnBuild>True</DeployOnBuild>
  <!-- Additional settings -->
</PropertyGroup>

DeployDefaultTarget 項目也必須設定為 Package。 不過,它是選擇性的,因為這就是預設值。

回到頁首

我可以變更 Visual Studio 建立部署套件的預設位置嗎?

是。 請編輯專案檔,然後在適當的 PropertyGroup 項目中加入 IntermediateOutputPath 項目。 下列範例顯示發行組建組態的 PropertyGroup 項目:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <IntermediateOutputPath>Path</IntermediateOutputPath>
  <!-- Additional settings -->
</PropertyGroup>

請將 Path 取代成您想要在其中建立與部署套件相關聯之所有檔案的資料夾完整路徑。

回到頁首

我可以設定委派規則,讓開發人員能夠部署至開發用伺服器但無法變更 IIS 設定嗎?

在 IIS 7 和更新版本中,這是可行的做法。 如需委派部署權限的詳細資訊,請參閱下列主題:

回到頁首

為什麼當我在部署期間執行自訂指令碼時出現 SQL 逾時錯誤?

執行多個混合交易模式的指令碼可能會造成逾時錯誤。 根據預設,自動產生的指令碼會在交易中執行。 不過,自訂指令碼不會在交易中執行。 因此,如果您在 [封裝/發行 SQL] 索引標籤上選取 [從現有資料庫提取資料及/或結構描述] 選項,而且加入自訂 SQL 指令碼,就必須變更某些指令碼的交易設定,讓所有指令碼都使用相同的交易設定。 如需詳細資訊,請參閱 HOW TO:使用 Web 應用程式專案部署資料庫

回到頁首

為什麼當我已安裝 ASP.NET 4 時又出現一則錯誤,表示需要安裝 ASP.NET 4?

若要部署 ASP.NET 4 Web 應用程式,您必須向目的伺服器的 IIS 註冊 ASP.NET 4。 此外,您所部署之目標 IIS 網站的應用程式集區必須指派給 .NET Framework 4。 如果其中一項條件不成立,當您嘗試部署時,可能會看見下列其中一則錯誤:

  • 預設的 .NET 4.0 應用程式集區不存在,或者無法新增此應用程式。 請確認這部電腦上已安裝 ASP.NET 4.0。

  • 您嘗試使用的應用程式已將 'managedRuntimeVersion' 內容設為 'v2.0'。 這個應用程式需要 'v4.0'。

當您安裝 Visual Studio 時,就會一併安裝 ASP.NET 4。 不過,安裝程序不會自動向 IIS 註冊 ASP.NET 4,而且現有的 IIS 網站不會自動指派給 .NET 4 應用程式集區。 若要修正此問題,請向 IIS 註冊 ASP.NET,並且將目的 IIS 網站的應用程式集區設定為套件所需要的 .NET Framework 版本。 如需如何註冊 IIS 的詳細資訊,請參閱 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)

回到頁首

如何修正這項錯誤 - sitemanifest 的資料流資料...的資料流資料?

在某些情況下,如果您嘗試使用 deploy.cmd 檔案搭配 t (測試) 選項來安裝套件,就會看見類似下列範例的錯誤:

錯誤: 無法使用 'sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript' 的資料流資料。

這表示該命令無法產生測試報告。 不過,這則訊息並不表示,如果您使用 y (實際安裝) 選項來執行此命令,部署將會失敗。 這則訊息只表示在測試模式下執行此命令會發生問題。

回到頁首

為什麼當部署嘗試執行 CREATE USER 或 CREATE ROLE 資料庫命令時卻失敗?

發生此錯誤的原因通常是您的資料庫包含使用者或角色,但是您使用了無權建立使用者或角色的認證來發行。 例如,裝載公司可能會將 db_datareader、db_datawriter 和 db_ddladmin 角色指派給為您設定的使用者帳戶。 雖然這些角色足以建立大部分資料庫物件,但是卻不足以建立使用者或角色。 如果這是導致錯誤的原因,您就會在 [輸出] 視窗中看見類似下面的訊息:

錯誤大約的位置在指令碼的第 '1' 行到第 '3' 行之間。 詳細資訊記錄檔中可能有錯誤的詳細資訊。 命令開頭為:

CREATE USER [user2] FOR LOGIN [user2] WITH DEFAULT

錯誤: 使用者沒有執行此動作的權限。

失敗的命令可能也是 CREATE ROLE。 在此情況下,您可以從資料庫部署中排除使用者和角色,避免發生此錯誤。 您可以針對資料庫自動產生的指令碼編輯 PreSource 項目,讓它包含下列屬性,藉以達成此目的:

CopyAllUsers=false, CopyAllRoles=false

如果開發資料庫中的使用者或角色必須存在目的資料庫中,請連絡您的裝載提供者以取得協助。

回到頁首

我可以建立單一套件並且用它來部署至 IIS 6 和 IIS 7 嗎?

如果下列其中一項條件成立,您就可以使用相同的套件來部署至 IIS 6 和 IIS 7:

  • 您沒有在 [封裝/發行 Web] 索引標籤上選取 [包含 IIS 管理員中設定的所有 IIS 設定] 選項。

  • 您選取了 [包含 IIS 管理員中設定的所有 IIS 設定] 選項並且在 IIS 6 上建立套件。

如果您選取了 [包含 IIS 管理員中設定的所有 IIS 設定] 選項,就無法將在 IIS 7 上建立的套件部署至 IIS 6。

如何部署使用 SQL Server Compact 的 ASP.NET Razor 專案?

您可以將 ASP.NET Razor 和 SQL Server Compact 組件放置於專案的 Bin 資料夾中,藉以部署專案。 若要在網站或 Web 應用程式專案中加入必要的組件,請遵循下列步驟進行:

  1. 在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後按一下 [新增可部署的相依性]。

  2. 在 [新增可部署的相依性] 對話方塊中,選取 [含有 Razor 語法的 ASP.NET Web Pages] 和 [SQL Server Compact]。

  3. 按一下 [確定]。

現在,您可以用部署任何其他專案的相同方式來部署 Web 專案。

我可以在 Visual Studio 中使用 .publishsettings 檔案嗎?

如果您的虛擬主機供應商傳送 .publishsettings 檔案給您,您可以將檔案放在專案根資料夾中,即可在 Visual Studio 中使用它。

請參閱

概念

ASP.NET 部署內容對應