在Visual Studio .NET中自動化生成和配置 摘要:本文介紹了如何使用 Microsoft? Visual Studio? .NET 自動化模型來自動化解決方案生成和項(xiàng)目生成以及生成配置。 目錄 B 控制生成配置
B1)解決方案生成配置
F 總結(jié) 簡介 在 Visual Studio .NET 中生成項(xiàng)目或解決方案時,需要按照與其相關(guān)聯(lián)的生成配置來生成。通常,您可以通過使用集成開發(fā)環(huán)境 (IDE) 來手動生成解決方案或項(xiàng)目;但 Visual Studio .NET 自動化模型中包含的對象使您可以通過編程方式更改生成配置并完成生成操作。 使用生成模型,您可以選擇要生成的項(xiàng)目并排除那些不需要生成的項(xiàng)目。另外,您還可以使用生成配置來確定生成所選項(xiàng)目的方式。在 Visual Studio 中可以定義兩種類型的生成配置:解決方案和項(xiàng)目。使用 SolutionBuild 對象,您可以通過編程方式來運(yùn)行、調(diào)試和部署解決方案或選定的項(xiàng)目。 對于創(chuàng)建無人看管的生成、自動化測試套件和批處理作業(yè)而言,通過編程方式控制生成配置以及項(xiàng)目和解決方案的生成這一功能非常有用。另外,您還可以使用生成模型來完成下列工作: · 創(chuàng)建、激活和刪除解決方案配置。 · 生成、運(yùn)行或部署解決方案配置中的任何項(xiàng)目或所有項(xiàng)目。 · 獲取項(xiàng)目或解決方案配置內(nèi)的對象的信息。 · 添加、刪除或獲取項(xiàng)目生成依賴項(xiàng)的信息。 Visual Studio .NET 自動化模型中的解決方案和項(xiàng)目生成對象的大部分成員都能與 Visual Studio .NET IDE 中的命令對應(yīng)起來。例如,SolutionBuild 對象包含的成員等同于 Build(生成)菜單中的命令:Build Solution(生成解決方案)、Rebuild Solution(重新生成解決方案)、Build Project(生成項(xiàng)目)和 Rebuild Project(重新生成項(xiàng)目),等等。 有關(guān)解決方案和項(xiàng)目生成配置的工作原理,以及如何在 IDE 中進(jìn)行設(shè)置的詳細(xì)信息,請參閱 Visual Studio 產(chǎn)品文檔中的 Builds During Application Development(英文)和 Build Configurations(英文)。 解決方案和項(xiàng)目自動化生成模型對象 Visual Studio .NET 自動化生成模型中的某些對象和集合使您可以修改解決方案和項(xiàng)目的生成配置以及依賴項(xiàng),還可以通過編程方式啟動生成,這些對象和集合包括:
在 Visual Studio .NET 自動化模型中,對象和集合之間關(guān)系的層次結(jié)構(gòu)如下所示: DTE SolutionBuild BuildDependencies BuildDependency SolutionConfigurations SolutionConfiguration SolutionContexts SolutionContext Project ConfigurationManager Configurations Configuration OutputGroups OutputGroup 有關(guān)完整的 Visual Studio .NET 自動化模型的詳圖,請參閱 Visual Studio產(chǎn)品文檔中的 Automation Object Model Chart(英文)。 有關(guān)可用配置和項(xiàng)目上下文的信息,請參閱 Configuration, Configuration Properties, Solution Property Pages Dialog Box(英文)。 控制生成配置 生成配置分為兩類:解決方案和項(xiàng)目。以下各節(jié)概要介紹如何通過編程方式創(chuàng)建和控制每種類型的配置。 解決方案生成配置 解決方案生成配置指定如何生成解決方案中的特定項(xiàng)目,以及如何部署這些項(xiàng)目(如果已啟用)。解決方案包含兩種默認(rèn)的生成配置:Debug(調(diào)試)和 Release(發(fā)布)。使用“Configuration Manager(配置管理器)”對話框,您可以新建解決方案配置、刪除配置或編輯現(xiàn)有配置。您也可以使用 SolutionConfiguration 對象通過編程方式來執(zhí)行上述操作。下面的 VSMacro 示例說明了實(shí)現(xiàn)上述操作的方法。 Sub SolutionConfigurationExample() ' 將解決方案配置設(shè)置為 Release(發(fā)布)。 Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ SolutionBuild.SolutionConfigurations.Item("Release") ' 去掉下一行中的注釋標(biāo)記將刪除當(dāng)前選定的配置。 ' 注意:不能刪除最后一個解決方案配置。 'SolnCfg.Delete() ' 創(chuàng)建新的基于現(xiàn)有 Debug(調(diào)試)生成配置的 ' 解決方案配置。新的配置必須以現(xiàn)有配置為基礎(chǔ)。 DTE.Solution.SolutionBuild.SolutionConfigurations.Add("NewSolnCfg", _ "Debug", False) ' 激活指定的解決方案配置,本示例中為 ' “NewSolnCfg”。 SolnCfg = DTE.Solution.SolutionBuild.SolutionConfigurations. _ Item("NewSolnCfg") SolnCfg.Activate() End Sub 解決方案上下文是顯示在解決方案的“Configuration Manager(配置管理器)”對話框中的一行設(shè)置,即:Project(項(xiàng)目)、Project Configuration(項(xiàng)目配置)、Platform(平臺)以及是否生成。SolutionContext 對象表示這一行屬性值,SolutionContexts 集合包含該解決方案配置的所有行。 以下示例列出了“Debug(調(diào)試)”解決方案配置中每個項(xiàng)目的所有解決方案上下文值。 Sub SolnCtx() ' 選擇“Debug(調(diào)試)”解決方案配置。 Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ SolutionBuild.SolutionConfigurations.Item("Debug") Dim SolnCtx As SolutionContext Dim SolnCtxs As SolutionContexts = SolnCfg.SolutionContexts Dim msg As String ' 列出解決方案中每個項(xiàng)目的解決方案上下文值。 For Each SolnCtx In SolnCtxs msg = "項(xiàng)目名稱:" & SolnCtx.ProjectName & vbCr msg = msg & "配置名稱:" & SolnCtx.ConfigurationName & _ vbCr msg = msg & "平臺名稱:" & SolnCtx.PlatformName & vbCr msg = msg & "是否生成:" & SolnCtx.ShouldBuild & vbCr msg = msg & "是否部署:" & SolnCtx.ShouldDeploy & vbCr MsgBox(msg) Next End Sub 項(xiàng)目生成配置 項(xiàng)目生成配置包括多組用于調(diào)試、生成、部署等的設(shè)置。這些配置設(shè)置列在“Project Property Pages(項(xiàng)目屬性頁)”對話框中。通過在解決方案資源管理器中用右鍵單擊某個項(xiàng)目并選擇“屬性”,便可以查閱這些設(shè)置??捎玫捻?xiàng)目配置名稱和平臺名稱顯示在對話框頂部的下拉框中。 對話框中的“Common Properties(公共屬性)”和“Configuration Properties(配置屬性)”節(jié)點(diǎn)列出了您可以更改的、所有可用的項(xiàng)目生成配置的屬性。例如,要查看或更改生成屬性,可以單擊 “Configuration Properties(配置屬性)”下的“Build(生成)”節(jié)點(diǎn)。更改設(shè)置并選擇“確定”后,該特定配置名稱和平臺名稱的設(shè)置便被保存下來。使用 Visual Studio .NET 自動化模型中的對象,您可以通過編程方式控制項(xiàng)目生成配置中的設(shè)置。 有關(guān)生成配置的工作原理以及如何創(chuàng)建生成配置的詳細(xì)信息,請參閱 Default and Custom Builds(英文)。 下面的 VSMacro 示例演示了如何更改項(xiàng)目的生成配置中的設(shè)置的值。 Sub ProjConfig() ' 此示例說明如何更改指定項(xiàng)目的生成配置中的 ' “定義跟蹤常量”設(shè)置的布爾值。 ' 此示例要求有一個已加載的項(xiàng)目。 Dim Proj As Project = DTE.VBProjects.Item(1) MsgBox("項(xiàng)目名稱:" & Proj.Name) MsgBox("要更改的項(xiàng)目配置屬性:" & Proj. _ ConfigurationManager.ActiveConfiguration.Properties.Item(3).Name) MsgBox("當(dāng)前值:" & Proj.ConfigurationManager. _ ActiveConfiguration.Properties.Item("DefineTrace").Value) Proj.ConfigurationManager.ActiveConfiguration.Properties.Item _ ("DefineTrace").Value = True MsgBox("新值:" & Proj.ConfigurationManager. _ ActiveConfiguration.Properties.Item("DefineTrace").Value) End Sub 控制項(xiàng)目配置屬性的另一種方法是使用 ConfigurationManager 對象。下面的示例演示了如何執(zhí)行此操作。 Sub CfgMgrExample() ' 此示例說明如何使用 ConfigurationManager ' 對象來設(shè)置項(xiàng)目配置屬性。 Dim Proj As Project = DTE.VBProjects.Item(1) Dim msg As String msg = "項(xiàng)目名稱:" & Proj.Name & vbCr msg = msg & "項(xiàng)目屬性名稱:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Name & vbCr msg = msg & "項(xiàng)目屬性值:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Value & vbCr MsgBox(msg) msg = "" Proj.ConfigurationManager.Item(1).Properties.Item(1).Value = False msg = "項(xiàng)目名稱:" & Proj.Name & vbCr msg = msg & "項(xiàng)目屬性名稱:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Name & vbCr msg = msg & "項(xiàng)目屬性值:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Value & vbCr MsgBox(msg) End Sub 啟動解決方案和項(xiàng)目的生成 使用 Visual Studio .NET 自動化模型,您可以通過編程方式執(zhí)行解決方案和項(xiàng)目的生成。實(shí)現(xiàn)此功能的主要對象是 SolutionBuild 對象。使用此對象可以: · 通過調(diào)用 SolutionBuild 對象的 Build 方法生成解決方案。 · 通過調(diào)用 BuildProject 方法在解決方案中生成特定項(xiàng)目。 · 通過調(diào)用 Debug 方法來啟動解決方案的“調(diào)試”生成。 · 通過調(diào)用 Deploy 方法來部署解決方案中的某些項(xiàng)目。 · 通過調(diào)用 Run 方法來執(zhí)行指定的啟動項(xiàng)目。 SolutionBuild 對象的各種屬性還允許您訪問: · 活動配置(即,生成解決方案時將會使用的當(dāng)前解決方案配置)。 · 生成依賴項(xiàng)(即,哪些項(xiàng)目依靠其他項(xiàng)目才能正確生成)。 · 生成狀態(tài)(即,生成是否在當(dāng)前環(huán)境會話中已啟動過,生成當(dāng)前是否正在進(jìn)行,或者生成是否已完成)。 SolutionBuild 對象還包含 Clean 方法,調(diào)用此方法可以從項(xiàng)目(標(biāo)記為在活動解決方案配置中生成)中刪除編譯器生成的支持文件。此外,SolutionBuild 對象還具有其他屬性。要獲得完整列表,請參閱 SolutionBuild Object Properties, Methods, and Events(英文)。 下面的示例演示了如何啟動當(dāng)前解決方案配置的生成。此示例假定您的生成配置名為“MyBuildConfig”。 Sub SolutionBuildExample() ' 生成活動解決方案配置。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.SolutionConfigurations.Item("MyBuildConfig").Activate sb.Build End Sub 下面的示例演示了如何啟動解決方案中特定的項(xiàng)目及其依賴項(xiàng)的生成。此示例假定您的生成配置名為“MyBuildConfig”,并且當(dāng)前的解決方案包含名為“ConsoleApplication1”的項(xiàng)目。 Sub ProjectBuildExample() ' 生成解決方案中指定的項(xiàng)目。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.BuildProject("MyBuildConfig", "ConsoleApplication1", False) End Sub 注意:WaitForBuildToFinish 標(biāo)志用于確定生成操作是否保留控制直至完成生成操作。默認(rèn)值為 False。如果將 WaitForBuildToFinish 設(shè)置為 False(即控制在啟動生成操作后立即返回),則可以使用 BuildDone 事件來確定生成操作完成。 項(xiàng)目生成依賴項(xiàng) Visual Studio.NET 生成配置模型還允許您使用 BuildDependencies 屬性來定義兩個項(xiàng)目之間在生成上的依存關(guān)系。下面的示例說明了如何使 Project1 依賴于 Project2,這樣,在生成解決方案時就必須先生成 Project2。 Sub BuildDependenciesExample() ' 使 Project 1 依賴于 Project 2。 Dim p1 As Project = DTE.Solution.Item(1) ' 項(xiàng)目 1 Dim p2 As Project = DTE.Solution.Item(2) ' 項(xiàng)目 2 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.BuildDependencies.Item(p1.UniqueName).AddProject(p2.UniqueName) End Sub 定義啟動項(xiàng)目 Startup Project(啟動項(xiàng)目)定義啟動 Visual Studio 調(diào)試器時要運(yùn)行的項(xiàng)目。您可以使用 SolutionBuild 對象的 StartupProjects 屬性通過編程方式來定義此設(shè)置。 注意:目前的 Visual Studio .NET 版本中的 StartupProjects 集合只允許設(shè)置一個啟動項(xiàng)目,但將來的版本中將允許設(shè)置多個啟動項(xiàng)目。 下面的示例演示了如何查看和更改當(dāng)前的啟動項(xiàng)目。 Sub StartUpProj() ' 此示例要求解決方案中存在兩個項(xiàng)目。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild Dim p1 As Project = DTE.Solution.Item(1) ' 項(xiàng)目 1 Dim p2 As Project = DTE.Solution.Item(2) ' 項(xiàng)目 2 MsgBox("當(dāng)前啟動項(xiàng)目:" & sb.StartupProjects(0)) ' 將啟動項(xiàng)目更改為另一個項(xiàng)目。 sb.StartupProjects = p1.UniqueName MsgBox("新啟動項(xiàng)目:" & sb.StartupProjects(0)) End Sub 總結(jié) Visual Studio .NET 自動化生成模型為通過編程方式控制解決方案和項(xiàng)目以及它們的生成配置提供了許多選項(xiàng)。要進(jìn)一步了解 Visual Studio .NET 自動化生成模型與 IDE 之間的關(guān)系,請使用對象瀏覽器瀏覽“The Solution and Project Automation Build Model Objects”中列出的對象,并且將它們的成員與各對話框進(jìn)行比較。練習(xí)使用模型,以便了解其工作原理。您還可以查閱 Visual Studio .NET 自動化示例 Web 站點(diǎn)上的“PrePostBuildRules Add-In”示例,網(wǎng)址為:http://msdn.microsoft.com/vstudio/nextgen/automation.asp(英文)。 |
|