從部署中排除檔案與資料夾
演講者:Jason Lee
本主題介紹在建置和封裝 Web 應用程式專案時,如何從 Web 部署套件中排除檔案和資料夾。
本主題圍繞著一家名為 Fabrikam, Inc. 的虛構公司展開,針對其企業部署需求而設計了一系列教學課程。本教學課程系列使用範例解決方案 (聯絡人管理員解決方案) 來代表具有現實複雜性的 Web 應用程式,其中包括 ASP.NET MVC 3 應用程式、Windows Communication Foundation (WCF) 服務,和資料庫專案。
這些教學課程的核心部署方法是根據「了解專案檔案」中所述的分割專案檔案方法,其中建置流程由兩個專案檔案控制,一個包含適用於所有目標環境的建置指令,另一個則包含特定環境的建置和部署設定。 在建置時,特定於環境的專案檔案被合併到與環境無關的專案檔案中,以形成完整的建置指令集。
概觀
當您在 Visual Studio 2010 中建置 Web 應用程式專案時,Web Publishing Pipeline (WPP) 可讓您透過將已編譯的 Web 應用程式封裝到可部署的 Web 套件中,來擴充此建置流程。 然後,您可以使用 Internet 資訊服務 (IIS) Web 部署工具 (Web Deploy) 將此 Web 套件部署到遠端 IIS Web 伺服器,或透過 IIS 管理員手動匯入 Web 套件。 「建置和封裝 Web 應用程式專案」中說明了此封裝過程。
那麼如何控制 Web 套件中包含的內容呢? Visual Studio 中的專案設定透過底層專案檔案,為許多場景提供了足夠的控制。 但是,在某些情況下,您可能希望根據特定的目標環境自訂 Web 套件的內容。 例如,您可能希望在將應用程式部署到測試環境時包含記錄檔案的資料夾,但在將應用程式部署到臨時或生產環境時排除該資料夾。 本主題將示範如何執行此操作。
預設包含什麼?
在 Visual Studio 中設定 Web 應用程式專案屬性時,「封裝/發佈 Web」頁面上的「要部署的項目」清單可讓您指定要包含在 Web 部署套件中的內容。 預設情況下,這會設定為「僅執行此應用程式所需的檔案」。
當您選擇「僅執行此應用程式所需的檔案」時,WPP 將嘗試確定應將哪些檔案新增至 Web 套件。 這包括:
- 項目的所有建置輸出。
- 任何標記有內容建置動作的檔案。
注意
確定要包含哪些檔案的邏輯包含在該檔案中:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets
排除特定檔案和資料夾
在某些情況下,您需要更精細地控制部署哪些檔案和資料夾。 如果您事先知道要排除哪些文件,並且排除適用於所有目標環境,則只需將每個文件的「建置動作」設為「無」即可。
從部署中排除特定檔案
- 在「方案總管」視窗中,以滑鼠右鍵按一下該檔案,然後按一下「屬性」。
- 在「屬性」視窗的「建置動作」行中,選擇「無」。
然而,這種方法並不一定永遠適用。 例如,您可能想要根據目標環境以及 Visual Studio 外部的情況,來變更包含的檔案和資料夾。 例如,在 Contact Manager 範例解決方案中,請看一下 ContactManager.Mvc 專案的內容:
- Internal 資料夾包含一些 SQL 指令碼,開發人員可以使用這些指令碼來建立、刪除和填充本機資料庫以進行開發。 此資料夾中的任何內容都不應部署到臨時或生產環境。
- Scripts 資料夾包含多個 JavaScript 檔案。 其中許多檔案純粹是為了支援偵錯或在 Visual Studio 中提供 IntelliSense。 其中一些文件不應部署到臨時或生產環境。 但是,您可能希望將它們部署到開發人員測試環境中以方便進行疑難排解。
儘管您可以操作專案檔案來排除特定檔案和資料夾,但還有一種更簡單的方法。 WPP 包含一個透過建構名為 ExcludeFromPackageFolders 和 ExcludeFromPackageFiles 的項目清單來排除檔案和資料夾的機制。 您可以透過將自己的項目新增至這些清單來擴展此機制。 為此,您需要完成以下高階步驟:
在與專案檔案相同的資料夾中建立一個名為 [專案名稱].wpp.targets 的自訂專案檔案。
注意
.wpp.targets 檔案需要與您的Web 應用程式專案檔案位於相同資料夾中 (例如,ContactManager.Mvc.csproj),而不是與您用於控制建置和部署流程的任何自訂專案檔案位於相同資料夾中。
在 .wpp.targets 檔案中,新增一個 ItemGroup 元素。
在 ItemGroup 元素中,新增 ExcludeFromPackageFolders 和 ExcludeFromPackageFiles 項目,以根據需要排除特定檔案和資料夾。
這是 .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 部署套件中排除檔案和資料夾
在 Visual Studio 2010 中開啟您的解決方案。
在「方案總管」視窗中,以滑鼠以滑鼠右鍵按一下 Web 應用程式專案節點 (例如,ContactManager.Mvc),指向「新增」,然後按一下「新項目」。
在「新增項目」對話方塊中,選擇「XML 檔案」範本。
在「名稱」方塊中,鍵入 [項目名稱].wpp.targets (例如,ContactManager.Mvc.wpp.targets),然後按一下「新增」。
注意
如果將新專案新增至專案的根節點,則會在與專案檔案相同的資料夾中建立該檔案。 您可以透過在 Windows 資源管理器中開啟該資料夾來驗證這一點。
在該檔案中,加入一個 Project 元素和一個 ItemGroup 元素:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> </ItemGroup> </Project>
如果要從 Web 套件中排除資料夾,請將 ExcludeFromPackageFolders 元素新增至 ItemGroup 元素:
在「包含」屬性中,提供要排除資料夾的清單 (以分號分隔)。
在 FromTarget 中繼資料元素中,提供一個有意義的值來指示排除資料夾的原因,例如 .wpp.targets 檔案的名稱。
<ExcludeFromPackageFolders Include="Internal"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFolders>
如果要從 Web 套件中排除檔案,請將 ExcludeFromPackageFiles 元素新增至 ItemGroup 元素:
在「包含」屬性中,提供要排除檔案的清單 (以分號分隔)。
在 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>
[專案名稱].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>
儲存並關閉 [專案名稱].wpp.targets 檔案。
下次建置並封裝 Web 應用程式專案時,WPP 將自動偵測 .wpp.targets 檔案。 您指定的任何檔案和資料夾都不會包含在 Web 套件中。
結論
本主題描述了如何在建置 Web 套件時排除特定的檔案和資料夾,方法是建立一個自訂的 .wpp.targets 檔案,並將其放在與您的網頁應用專案文件相同的資料夾中。
深入閱讀
若想進一步了解如何使用自訂 Microsoft Build Engine (MSBuild) 專案檔案來控制部署程序,請參閱「了解專案檔案」和「了解建置程序」。 有關封裝和部署過程的更多資訊,請參閱「建置和封裝 Web 應用程式專案」、「設定 Web 套件部署參數」和「部署 Web 套件」。