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

您可以使用下列產品,本主題回答有關如何的常見問題集部署 Web 應用程式專案:

許多解答指示您透過編輯發行設定檔 (.pubxml) 檔或 wpp.targets 檔案變更部署設定。 如需這項做法的詳細資訊,請參閱HOW TO:編輯發行設定檔 (.pubxml) 檔案中的部署設定以及 Visual Studio Web 專案中的 .wpp.targets 檔案

此主題包括下列章節:

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

  • 所有在 [我的專案] 資料夾中的檔案為何無法取得部署?

  • 我可以包含特定檔案或資料夾從我的專案資料夾之外?

  • 如何?停用 Web.config 轉換?

  • 我何時應該使用 Web Deploy 參數而非 Web.config 轉換?

  • 如何?部署程式碼第一個資料庫,而不需要使用移轉?

  • 如何偵錯封裝或發行處理序的部署?

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

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

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

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

  • 如何?是長部署程序期間保留我的從重新啟動多次的應用程式定義域?

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

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

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

  • 遠端部署為何大型檔案失敗,不過,本機部署成功?

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

您可以在 [封裝/發行 Web] 索引標籤上選取 [只有執行此應用程式必須的檔案] 或 [此專案中的所有檔案] 選項,藉以限制部署的檔案。 如果您選取了 [此專案中的所有檔案] 選項,就可以用滑鼠右鍵按一下 [方案總管] 中的檔案,然後選取 [從專案移除] 避免部署此檔案。 如需功能的詳細資訊檔中排除,當您使用 [只有檔案需要執行的應用程式] 或 [所有檔案都包含在此專案中] 選項,請參閱 所有在 [我的專案] 資料夾中的檔案為何無法取得部署?。

如果這些選項對您而言不夠彈性,請編輯這個 .pubxml 或 .wpp.targets 檔案並將 ExcludeFilesFromDeployment 項目或 ExcludeFoldersFromDeployment 項目 (或這兩者)。 PropertyGroup 項目。 在每個項目,您可以指定單一名稱,也可以指定以分號分隔的多個名稱以分號 (;),如下列範例所示:

<PropertyGroup">
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
</PropertyGroup> 

如需詳細資訊,請參閱Sayed Hashimi 的部落格上的下列文章:

  1. Web 部署工具 (即):建置套件包含額外的檔案或排除特定檔案

  2. Web 部署工具 (即):如何根據設定的套件中排除檔案

回到頁首

所有在 [我的專案] 資料夾中的檔案為何無法取得部署?

從 [專案] 功能表選擇 [封裝/發行設定] 開啟 [專案屬性] 視窗的 [封裝/發行 Web] 索引標籤。 在標示的 [部署項目 (適用於所有部署方法)] 區段的下拉式清單中提供三種選項:

  • 只有執行此應用程式必須的檔案。 此為預設值。 Visual Studio 會嘗試判斷哪些檔案針對應用程式順利執行所需的項目。 例如,這會在建置期間所產生的成員 [內容] 標記的容器資料夾、檔案和檔案包含組件。 若要查看檔案是否標記為 [內容],請選取 [方案總管] 的檔案,並且檢查 [屬性] 視窗之檔案的 [建置動作] 屬性。 您可以變更 [建置動作] 值加入至 [內容] 會將檔案部署,或將它變更為其他,例如 [],防止檔案部署。 會自動設定為 [內容] 的某些檔案類型包括 .master .svc .ashx,,,,, .browser .asax .skin, .config,而 SiteMap。 在專案中必須包含檔案才能讓 [建置動作] 屬性。

  • 此專案中的所有檔案。 不論其 [建置動作] 屬性值, Visual Studio 部署專案中包含的所有檔案。

  • [在專案資料夾中的所有檔案。]。 Visual Studio 部署至專案中資料夾和子資料夾中的所有檔案,這些檔案是否包含在專案或其 [建置動作] 屬性值。

如果您熟悉 MSBuild 語法,您可以找到有關這三個選項方式的詳細資訊在下列檔案運作:

  • Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

  • Microsoft.Web.Publishing.AllFilesInTheProject.targets

  • Microsoft.Web.Publishing.AllFilesInProjectFolder.targets

這些檔案可以在已安裝 Visual Studio 的電腦的下列位置:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\

回到頁首

我可以包含特定檔案或資料夾從我的專案資料夾之外?

是。 如需這項做法的詳細資訊, 建立封裝包含額外的檔案或排除特定檔案 請參閱Sayed Hashimi 的部落格。

回到頁首

如何?停用 Web.config 轉換?

有幾個選擇:

  • 在 Web.config 註解的特定轉換轉換檔案。

  • 提供轉換檔案重新命名為未對應至所定義之組建組態或發行設定檔的名稱。 例如,您可以將 Web.Debug.config 變更為 Web.Debugx.config (您可能必須重新命名檔案在 Visual Studio 以外)。

  • 刪除轉換檔案。 如果您已自訂該檔案,則自訂會遺失。

  • 將項目加入至 TransformWebConfigEnabledPropertyGroup 項目並將其值設定為編輯 .pubxml 檔案或 .wpp.targets 檔案至 False。

回到頁首

我何時應該使用 Web Deploy 參數而非 Web.config 轉換?

Web 部署參數與 Visual Studio Web.config 轉換為複雜設定,但有相當大的彈性。 Web 部署參數是複雜的設定,因為它們可以自動化許多其他部署工作,例如更新資料庫指令碼和 IIS 設定。 Web 部署參數為 Web.config 轉換非常有用,當您建立部署套件時,而且,當您建立套件時您不知道需要輸入所部署的 Web.config 檔中的值。 Web 部署參數可讓您指定參數的值,在安裝套件時,不會在建立時, 這特別適用於企業環境中,經常會發生不同的人可以負責建立及安裝部署套件。 例如,若要建立套件的開發人員可能不知道需要 Web.config 檔案中的某些密碼。 安裝套件的 IT 系統管理員可以存取這些值,在安裝套件時。 如需詳細資訊, 參數化至. Web.config 轉換 請參閱 Vishal Joshi 部落格上和 HOW TO:在 Web 部署套件中使用 Web 部署參數

回到頁首

如何?部署程式碼第一個資料庫,而不會移轉?

當您實作 Entity Framework 程式碼中的第一個內容類別存取資料庫時, [發行 Web] 精靈的 [設定] 索引標籤會顯示可讓您使用程式碼的第一個移轉自動化該資料庫部署的核取方塊。 但是,如果是使用程式碼的第一個 API,您只能存取資料庫及程式碼並未先使用來建立資料庫,您不可以使用移轉進行部署。 在這個案例中,您想做可讓您部署 SQL Server 資料庫的 [更新資料庫] 核取方塊下無法使用程式碼的第一個內容。

部署程式碼的第一個資料庫,而不使用移轉

  1. 在 Visual Studio 中,因此,如果您有開啟 [發行 Web] 的精靈,請將它關閉。

  2. 在應用程式的 Web.config 檔,請建立資料庫的額外連接字串項目。 將此新連接字串不符合內容類別名稱或完整類別名稱的名稱。

  3. 建置專案,然後開啟 [發行 Web] 精靈並選擇您要使用的設定檔。

  4. 選取 [設定] 索引標籤。

    您在索引標籤的 [資料庫] 部分的資料庫會看見兩個項目,其中一個程式碼的第一個內容類別的另一個在 Web.config 檔案中的連接字串。

  5. 在程式碼第一個內容類別中的項目,請輸入連接字串您希望應用程式在執行階段,並清除 [套用程式碼的第一個移轉] 核取方塊。

  6. 在部署期間,在新的 Web.config 檔案中的連接字串中的項目,請輸入應該用於執行結構描述變更的連接字串和選項 [更新資料庫]。

    如需如何存取資料庫部署設定的詳細資訊,請參閱 HOW TO:在 Visual Studio 中使用按一下發行來部署 Web 應用程式專案

回到頁首

如何偵錯封裝或發行處理序的部署?

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

  • 無訊息

  • 最小

  • Normal

  • 詳細

  • 診斷

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

回到頁首

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

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

回到頁首

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

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

回到頁首

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

您可以建立兩個發行設定檔,則發行專案和一個建立備份套件。 然後,在發行專案之後才必須切換至重新建立套件並按一下 [發佈] 的發行設定檔。 如需如何建立封裝的發行設定檔的詳細資訊,請參閱 HOW TO:在 Visual Studio 中建立 Web 部署套件

回到頁首

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

是。 請編輯專案檔,然後在適當的 PropertyGroup 項目中加入 DeployOnBuild 項目。 如需如何編輯專案檔的詳細資訊,請參閱 HOW TO:編輯專案檔的部署設定(,)。下列範例顯示發行組建組態的 PropertyGroup 項目:

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

如果您在專案檔中的這項變更,請確定更新的 PropertyGroup 項目在 Import 陳述式之前位於專案檔。 (必須在 Microsoft.Web.Publishing.targets的 Import 之前設定 DeployOnBuild 屬性)。

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

這是您必須讓套件建立自動的所有,當您從命令列建立時的方案。 若要讓自動套件建立也工作,當您從 Visual Studio 中的方案,請將下列程式碼加入至專案檔中 Microsoft.CSharp.targets 或 Microsoft.VisualBasic.targets的 Import 之後:

<PropertyGroup> 
  <BuildDependsOn> 
    $(BuildDependsOn); 
    Package 
  </BuildDependsOn> 
</PropertyGroup>

回到頁首

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

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

回到頁首

如何?是長部署程序期間保留我的從重新啟動多次的應用程式定義域?

如果您需要執行多個複製命令部署應用程式,並在它們之間有顯著的間隔,應用程式定義域會重新啟動在複製命令之間。 為了避免重新啟動,請將 httpRuntime 項目 (ASP.NET 設定結構描述) 項目加入至 Web.config 檔並將屬性設定為 waitChangeNotification 等候的秒數。確保應用程式定義域不會在複製命令之間重新啟動時間。 例如,如果您想要指定五秒鐘的等候時間,httpRuntime 項目可能看起來與下列範例類似。

<configuration>
  <system.web>
        <compilation debug="false" targetFramework="4.0" />
    <httpRuntime 
      waitChangeNotification="5" />
  </system.web>
</configuration>

如果您想要確保應用程式定義域會在第一個複製命令執行之後的某個間隔內重新啟動,請將 maxWaitChangeNotification 屬性加入 httpRuntime 項目,並將其設為等候秒數的最大值。 例如,如果包含 httpRuntime 項目的 Web.config 檔有這兩個屬性,則可能會如下列範例所示。

<configuration>
  <system.web>
    <httpRuntime 
      waitChangeNotification="5"
      maxWaitChangeNotification="10" />
  </system.web>
</configuration>

回到頁首

為什麼當我已安裝 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 Registration Tool (Aspnet_regiis.exe)

回到頁首

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

若符合下列任一狀況,您就可以使用相同的套件來部署至 IIS 6 和 IIS 7:

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

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

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

回到頁首

遠端部署為何大型檔案失敗,不過,本機部署成功?

通常,當您部署至實際執行伺服器時您跨防火牆部署。 如果您有大型檔案的結束資料流錯誤,請檢查防火牆的設定。 如果這是部署失敗的原因,您可能會看到錯誤訊息 (例如在來源電腦上的範例:

Warning: Retrying the sync because a socket error (10054) occurred.

Retrying operation 'Serialization' on object MSDeploy.contentPath (sourcePath).

在目的伺服器上,您可能會看到錯誤訊息 (如下列範例所示:

System.Net.HttpListenerException: An operation was attempted on a nonexistent network connection

回到頁首

請參閱

概念

Visual Studio 及 ASP.NET 的 Web 部署內容對應