從部署中排除檔案與資料夾

作者:Jason Lee

本主題描述當您建置和封裝 Web 應用程式專案時,如何從 Web 部署套件中排除檔案和資料夾。

本主題構成一系列教學課程的一部分,以名為 Fabrikam, Inc 的虛構公司企業部署需求為基礎。本教學課程系列使用範例解決方案連絡人 管理員解決方案來代表具有實際複雜層級的 Web 應用程式,包括 ASP.NET MVC 3 應用程式、Windows Communication Foundation (WCF) 服務和資料庫專案。

這些教學課程的核心部署方法是以 瞭解專案檔中所述的分割專案檔方法為基礎,其中建置程式是由兩個專案檔控制,一個包含適用于每個目的地環境的組建指示,另一個包含環境特定的組建和部署設定。 在建置階段,環境特定的專案檔會合並到與環境無關的專案檔中,以形成一組完整的建置指示。

概觀

當您在 Visual Studio 2010 中建置 Web 應用程式專案時,Web 發佈管線 (WPP) 可讓您將已編譯的 Web 應用程式封裝封裝成可部署的 Web 套件來擴充此建置程式。 然後,您可以使用 Internet Information Services (IIS) Web 部署工具 (Web Deploy) 將此 Web 套件部署至遠端 IIS 網頁伺服器,或透過 IIS 管理員手動匯入 Web 套件。 此封裝程式會在 建置和封裝 Web 應用程式專案中說明。

那麼,您要如何控制 Web 套件中包含的專案? Visual Studio 中的專案設定是透過基礎專案檔,為許多案例提供足夠的控制權。 不過,在某些情況下,您可能會想要針對特定目的地環境量身打造 Web 套件的內容。 例如,當您將應用程式部署至測試環境,但當您將應用程式部署至預備環境或生產環境時,可能會想要包含記錄檔的資料夾。 本主題將示範如何執行這項操作。

預設會包含哪些專案?

當您在 Visual Studio 中設定 Web 應用程式專案屬性時,[套件/發佈 Web] 頁面上要部署的專案清單可讓您指定要包含在 Web 部署套件中的專案。 根據預設,這會設定為 [僅執行此應用程式所需的檔案]。

根據預設,這會設定為 [僅執行此應用程式所需的檔案]。

當您選擇 [僅執行此應用程式所需的檔案] 時,WPP 會嘗試判斷應該將哪些檔案新增至 Web 套件。 這包括:

  • 專案的所有組建輸出。
  • 任何標示為 Content建置動作的檔案。

注意

決定要包含哪些檔案的邏輯包含在此檔案中:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

排除特定檔案和資料夾

在某些情況下,您會想要更精細地控制部署的檔案和資料夾。 如果您知道要事先排除哪些檔案,而排除範圍會套用至所有目的地環境,您只要將每個檔案的 建置動作 設定為 [無]。

從部署中排除特定檔案

  1. [方案總管]視窗中,以滑鼠右鍵按一下檔案,然後按一下 [屬性]。
  2. 在 [ 屬性] 視窗中的 [ 建置動作] 資料列中,選取 [無]。

不過,這種方法不一定很方便。 例如,您可能會想要根據目的地環境,以及 Visual Studio 外部,變更包含哪些檔案和資料夾。 例如,在連絡人管理員範例解決方案中,查看 ContactManager.Mvc 專案的內容:

ContactManager.Mvc 專案的內容。

  • [內部] 資料夾包含開發人員用來建立、卸載和填入本機資料庫的一些 SQL 腳本,以供開發之用。 此資料夾中沒有任何專案應該部署到預備環境或生產環境。
  • Scripts 資料夾包含數個 JavaScript 檔案。 其中有許多檔案只是為了支援偵錯,或在 Visual Studio 中提供 IntelliSense。 其中部分檔案不應部署到預備環境或生產環境。 不過,您可能想要將它們部署至開發人員測試環境,以協助進行疑難排解。

雖然您可以操作專案檔來排除特定檔案和資料夾,但有更簡單的方式。 WPP 包含一種機制,可藉由建置名為 ExcludeFromPackageFoldersExcludeFromPackageFiles的專案清單來排除檔案和資料夾。 您可以將您自己的專案新增至這些清單,以擴充此機制。 若要這樣做,您需要完成下列高階步驟:

  1. 在與專案檔相同的資料夾中,建立名為 [專案名稱].wpp.targets 的 自訂專案檔。

    注意

    .wpp.targets檔案必須與 Web 應用程式專案檔位於相同的資料夾中,例如ContactManager.Mvc.csproj,而不是與您用來控制建置和部署程式的任何自訂專案檔位於相同的資料夾中。

  2. .wpp.targets 檔案中,新增 ItemGroup 元素。

  3. ItemGroup 元素中,新增 ExcludeFromPackageFoldersExcludeFromPackageFiles 專案,以視需要排除特定檔案和資料夾。

這是這個 .wpp.targets 檔案的基本結構:

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

請注意,每個專案都包含名為 FromTarget的專案中繼資料專案。 這是不會影響建置程式的選擇性值;它只會指出當有人檢閱組建記錄時,為何會省略特定檔案或資料夾。

從 Web 套件排除檔案和資料夾

下一個程式示範如何在建置專案時,將 .wpp.targets 檔案新增至 Web 應用程式專案,以及如何使用檔案從 Web 套件排除特定檔案和資料夾。

從 Web 部署套件中排除檔案和資料夾

  1. 在 Visual Studio 2010 中開啟您的解決方案。

  2. [方案總管]視窗中,以滑鼠右鍵按一下 Web 應用程式專案節點 (,例如ContactManager.Mvc) ,指向 [新增],然後按一下 [新增專案]。

  3. 在 [ 新增專案 ] 對話方塊中,選取 [XML 檔案] 範本。

  4. 在 [ 名稱] 方塊中,輸入 [專案名稱].wpp.targets (例如 ContactManager.Mvc.wpp.targets) ,然後按一下 [ 新增]。

    在 [名稱] 方塊中,輸入專案名稱.wpp.targets,然後按一下 [新增]。

    注意

    如果您將新專案新增至專案的根節點,檔案會建立在與專案檔相同的資料夾中。 您可以在 Windows 檔案總管中開啟資料夾來確認這一點。

  5. 在 檔案中,新增 Project 元素和 ItemGroup 元素:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. 如果您想要從 Web 套件排除資料夾,請將 ExcludeFromPackageFolders 元素新增至 ItemGroup 元素:

    1. Include 屬性中,提供您要排除之資料夾的分號分隔清單。

    2. FromTarget 中繼資料元素中,提供有意義的值,以指出為何要排除資料夾,例如 .wpp.targets 檔案的名稱。

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. 如果您想要從 Web 套件中排除檔案,請將 ExcludeFromPackageFiles 元素新增至 ItemGroup 元素:

    1. Include 屬性中,提供您要排除之檔案的分號分隔清單。

    2. FromTarget 中繼資料元素中,提供有意義的值,以指出為何要排除檔案,例如 .wpp.targets 檔案的名稱。

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. [專案名稱].wpp.targets檔案現在應該類似這樣:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. 儲存並關閉 [專案名稱].wpp.targets 檔案。

下次建置和封裝 Web 應用程式專案時,WPP 會自動偵測 .wpp.targets 檔案。 您指定的任何檔案和資料夾都不會包含在 Web 套件中。

結論

本主題描述如何在建置 Web 套件時排除特定檔案和資料夾,方法是在與 Web 應用程式專案檔相同的資料夾中建立自訂 .wpp.targets 檔案。

深入閱讀

如需使用自訂Microsoft Build Engine (MSBuild) 專案檔來控制部署程式的詳細資訊,請參閱瞭解專案檔瞭解建置程式。 如需封裝和部署程式的詳細資訊,請參閱 建置和封裝 Web 應用程式專案設定 Web 套件部署的參數,以及 部署 Web 套件