在Visual Studio .NET中自动化生成和配置(抄录)
在Visual Studio .NET中自动化生成和配置 摘要:本文介绍了如何使用 Microsoft® Visual Studio® .NET 自动化模型来自动化解决方案生成和项目生成以及生成配置。 目录 B 控制生成配置
B1)解决方案生成配置
B2)项目生成配置
D 项目生成依赖项
E 定义启动项目
F 总结 简介 在 Visual Studio .NET 中生成项目或解决方案时,需要按照与其相关联的生成配置来生成。通常,您可以通过使用集成开发环境 (IDE) 来手动生成解决方案或项目;但 Visual Studio .NET 自动化模型中包含的对象使您可以通过编程方式更改生成配置并完成生成操作。 使用生成模型,您可以选择要生成的项目并排除那些不需要生成的项目。另外,您还可以使用生成配置来确定生成所选项目的方式。在 Visual Studio 中可以定义两种类型的生成配置:解决方案和项目。使用 SolutionBuild 对象,您可以通过编程方式来运行、调试和部署解决方案或选定的项目。 对于创建无人看管的生成、自动化测试套件和批处理作业而言,通过编程方式控制生成配置以及项目和解决方案的生成这一功能非常有用。另外,您还可以使用生成模型来完成下列工作: · 创建、激活和删除解决方案配置。 · 生成、运行或部署解决方案配置中的任何项目或所有项目。 · 获取项目或解决方案配置内的对象的信息。 · 添加、删除或获取项目生成依赖项的信息。 Visual Studio .NET 自动化模型中的解决方案和项目生成对象的大部分成员都能与 Visual Studio .NET IDE 中的命令对应起来。例如,SolutionBuild 对象包含的成员等同于 Build(生成)菜单中的命令:Build Solution(生成解决方案)、Rebuild Solution(重新生成解决方案)、Build Project(生成项目)和 Rebuild Project(重新生成项目),等等。 有关解决方案和项目生成配置的工作原理,以及如何在 IDE 中进行设置的详细信息,请参阅 Visual Studio 产品文档中的 Builds During Application Development(英文)和 Build Configurations(英文)。 解决方案和项目自动化生成模型对象 Visual Studio .NET 自动化生成模型中的某些对象和集合使您可以修改解决方案和项目的生成配置以及依赖项,还可以通过编程方式启动生成,这些对象和集合包括:
在 Visual Studio .NET 自动化模型中,对象和集合之间关系的层次结构如下所示: DTE SolutionBuild BuildDependencies BuildDependency SolutionConfigurations SolutionConfiguration SolutionContexts SolutionContext Project ConfigurationManager Configurations Configuration OutputGroups OutputGroup 有关完整的 Visual Studio .NET 自动化模型的详图,请参阅 Visual Studio产品文档中的 Automation Object Model Chart(英文)。 有关可用配置和项目上下文的信息,请参阅 Configuration, Configuration Properties, Solution Property Pages Dialog Box(英文)。 控制生成配置 生成配置分为两类:解决方案和项目。以下各节概要介绍如何通过编程方式创建和控制每种类型的配置。 解决方案生成配置 解决方案生成配置指定如何生成解决方案中的特定项目,以及如何部署这些项目(如果已启用)。解决方案包含两种默认的生成配置:Debug(调试)和 Release(发布)。使用“Configuration Manager(配置管理器)”对话框,您可以新建解决方案配置、删除配置或编辑现有配置。您也可以使用 SolutionConfiguration 对象通过编程方式来执行上述操作。下面的 VSMacro 示例说明了实现上述操作的方法。 Sub SolutionConfigurationExample() ' 将解决方案配置设置为 Release(发布)。 Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ SolutionBuild.SolutionConfigurations.Item("Release") ' 去掉下一行中的注释标记将删除当前选定的配置。 ' 注意:不能删除最后一个解决方案配置。 'SolnCfg.Delete() ' 创建新的基于现有 Debug(调试)生成配置的 ' 解决方案配置。新的配置必须以现有配置为基础。 DTE.Solution.SolutionBuild.SolutionConfigurations.Add("NewSolnCfg", _ "Debug", False) ' 激活指定的解决方案配置,本示例中为 ' “NewSolnCfg”。 SolnCfg = DTE.Solution.SolutionBuild.SolutionConfigurations. _ Item("NewSolnCfg") SolnCfg.Activate() End Sub 解决方案上下文是显示在解决方案的“Configuration Manager(配置管理器)”对话框中的一行设置,即:Project(项目)、Project Configuration(项目配置)、Platform(平台)以及是否生成。SolutionContext 对象表示这一行属性值,SolutionContexts 集合包含该解决方案配置的所有行。 以下示例列出了“Debug(调试)”解决方案配置中每个项目的所有解决方案上下文值。 Sub SolnCtx() ' 选择“Debug(调试)”解决方案配置。 Dim SolnCfg As SolutionConfiguration = DTE.Solution. _ SolutionBuild.SolutionConfigurations.Item("Debug") Dim SolnCtx As SolutionContext Dim SolnCtxs As SolutionContexts = SolnCfg.SolutionContexts Dim msg As String ' 列出解决方案中每个项目的解决方案上下文值。 For Each SolnCtx In SolnCtxs msg = "项目名称:" & 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 项目生成配置 项目生成配置包括多组用于调试、生成、部署等的设置。这些配置设置列在“Project Property Pages(项目属性页)”对话框中。通过在解决方案资源管理器中用右键单击某个项目并选择“属性”,便可以查阅这些设置。可用的项目配置名称和平台名称显示在对话框顶部的下拉框中。 对话框中的“Common Properties(公共属性)”和“Configuration Properties(配置属性)”节点列出了您可以更改的、所有可用的项目生成配置的属性。例如,要查看或更改生成属性,可以单击 “Configuration Properties(配置属性)”下的“Build(生成)”节点。更改设置并选择“确定”后,该特定配置名称和平台名称的设置便被保存下来。使用 Visual Studio .NET 自动化模型中的对象,您可以通过编程方式控制项目生成配置中的设置。 有关生成配置的工作原理以及如何创建生成配置的详细信息,请参阅 Default and Custom Builds(英文)。 下面的 VSMacro 示例演示了如何更改项目的生成配置中的设置的值。 Sub ProjConfig() ' 此示例说明如何更改指定项目的生成配置中的 ' “定义跟踪常量”设置的布尔值。 ' 此示例要求有一个已加载的项目。 Dim Proj As Project = DTE.VBProjects.Item(1) MsgBox("项目名称:" & Proj.Name) MsgBox("要更改的项目配置属性:" & Proj. _ ConfigurationManager.ActiveConfiguration.Properties.Item(3).Name) MsgBox("当前值:" & 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 控制项目配置属性的另一种方法是使用 ConfigurationManager 对象。下面的示例演示了如何执行此操作。 Sub CfgMgrExample() ' 此示例说明如何使用 ConfigurationManager ' 对象来设置项目配置属性。 Dim Proj As Project = DTE.VBProjects.Item(1) Dim msg As String msg = "项目名称:" & Proj.Name & vbCr msg = msg & "项目属性名称:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Name & vbCr msg = msg & "项目属性值:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Value & vbCr MsgBox(msg) msg = "" Proj.ConfigurationManager.Item(1).Properties.Item(1).Value = False msg = "项目名称:" & Proj.Name & vbCr msg = msg & "项目属性名称:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Name & vbCr msg = msg & "项目属性值:" & Proj.ConfigurationManager. _ Item(1).Properties.Item(1).Value & vbCr MsgBox(msg) End Sub 启动解决方案和项目的生成 使用 Visual Studio .NET 自动化模型,您可以通过编程方式执行解决方案和项目的生成。实现此功能的主要对象是 SolutionBuild 对象。使用此对象可以: · 通过调用 SolutionBuild 对象的 Build 方法生成解决方案。 · 通过调用 BuildProject 方法在解决方案中生成特定项目。 · 通过调用 Debug 方法来启动解决方案的“调试”生成。 · 通过调用 Deploy 方法来部署解决方案中的某些项目。 · 通过调用 Run 方法来执行指定的启动项目。 SolutionBuild 对象的各种属性还允许您访问: · 活动配置(即,生成解决方案时将会使用的当前解决方案配置)。 · 生成依赖项(即,哪些项目依靠其他项目才能正确生成)。 · 生成状态(即,生成是否在当前环境会话中已启动过,生成当前是否正在进行,或者生成是否已完成)。 SolutionBuild 对象还包含 Clean 方法,调用此方法可以从项目(标记为在活动解决方案配置中生成)中删除编译器生成的支持文件。此外,SolutionBuild 对象还具有其他属性。要获得完整列表,请参阅 SolutionBuild Object Properties, Methods, and Events(英文)。 下面的示例演示了如何启动当前解决方案配置的生成。此示例假定您的生成配置名为“MyBuildConfig”。 Sub SolutionBuildExample() ' 生成活动解决方案配置。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.SolutionConfigurations.Item("MyBuildConfig").Activate sb.Build End Sub 下面的示例演示了如何启动解决方案中特定的项目及其依赖项的生成。此示例假定您的生成配置名为“MyBuildConfig”,并且当前的解决方案包含名为“ConsoleApplication1”的项目。 Sub ProjectBuildExample() ' 生成解决方案中指定的项目。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.BuildProject("MyBuildConfig", "ConsoleApplication1", False) End Sub 注意:WaitForBuildToFinish 标志用于确定生成操作是否保留控制直至完成生成操作。默认值为 False。如果将 WaitForBuildToFinish 设置为 False(即控制在启动生成操作后立即返回),则可以使用 BuildDone 事件来确定生成操作完成。 项目生成依赖项 Visual Studio.NET 生成配置模型还允许您使用 BuildDependencies 属性来定义两个项目之间在生成上的依存关系。下面的示例说明了如何使 Project1 依赖于 Project2,这样,在生成解决方案时就必须先生成 Project2。 Sub BuildDependenciesExample() ' 使 Project 1 依赖于 Project 2。 Dim p1 As Project = DTE.Solution.Item(1) ' 项目 1 Dim p2 As Project = DTE.Solution.Item(2) ' 项目 2 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild sb.BuildDependencies.Item(p1.UniqueName).AddProject(p2.UniqueName) End Sub 定义启动项目 Startup Project(启动项目)定义启动 Visual Studio 调试器时要运行的项目。您可以使用 SolutionBuild 对象的 StartupProjects 属性通过编程方式来定义此设置。 注意:目前的 Visual Studio .NET 版本中的 StartupProjects 集合只允许设置一个启动项目,但将来的版本中将允许设置多个启动项目。 下面的示例演示了如何查看和更改当前的启动项目。 Sub StartUpProj() ' 此示例要求解决方案中存在两个项目。 Dim sb As SolutionBuild = DTE.Solution.SolutionBuild Dim p1 As Project = DTE.Solution.Item(1) ' 项目 1 Dim p2 As Project = DTE.Solution.Item(2) ' 项目 2 MsgBox("当前启动项目:" & sb.StartupProjects(0)) ' 将启动项目更改为另一个项目。 sb.StartupProjects = p1.UniqueName MsgBox("新启动项目:" & sb.StartupProjects(0)) End Sub 总结 Visual Studio .NET 自动化生成模型为通过编程方式控制解决方案和项目以及它们的生成配置提供了许多选项。要进一步了解 Visual Studio .NET 自动化生成模型与 IDE 之间的关系,请使用对象浏览器浏览“The Solution and Project Automation Build Model Objects”中列出的对象,并且将它们的成员与各对话框进行比较。练习使用模型,以便了解其工作原理。您还可以查阅 Visual Studio .NET 自动化示例 Web 站点上的“PrePostBuildRules Add-In”示例,网址为:http://msdn.microsoft.com/vstudio/nextgen/automation.asp(英文)。 |