9

我想通过 Visual Studio 中的包管理器控制台运行 Clean、Build 和 Rebuild 命令,但到目前为止我还没有找到方法。

以下命令让我获得了解决方案中的第一个项目:

$project = Get-Project | select -First 1

当我运行时,我可以看到item$project | Get-Member的成员。$project

#Members of the $project ($project | Get-Member)

#   TypeName: System.__ComObject#{866311e6-c887-4143-9833-645f5b93f6f1}
#
#Name                 MemberType            Definition                                                                                                                                   
#----                 ----------            ----------                                                                                                                                   
#ProjectName          CodeProperty          System.String ProjectName{get=GetCustomUniqueName;}                                                                                          
#Delete               Method                void Delete ()                                                                                                                               
#Save                 Method                void Save (string)                                                                                                                           
#SaveAs               Method                void SaveAs (string)                                                                                                                         
#Extender             ParameterizedProperty IDispatch Extender (string) {get}                                                                                                            
#CodeModel            Property              CodeModel CodeModel () {get}                                                                                                                 
#Collection           Property              Projects Collection () {get}                                                                                                                 
#ConfigurationManager Property              ConfigurationManager ConfigurationManager () {get}                                                                                           
#DTE                  Property              DTE DTE () {get}                                                                                                                             
#ExtenderCATID        Property              string ExtenderCATID () {get}                                                                                                                
#ExtenderNames        Property              Variant ExtenderNames () {get}                                                                                                               
#FileName             Property              string FileName () {get}                                                                                                                     
#FullName             Property              string FullName () {get}                                                                                                                     
#Globals              Property              Globals Globals () {get}                                                                                                                     
#IsDirty              Property              bool IsDirty () {get} {set}                                                                                                                  
#Kind                 Property              string Kind () {get}                                                                                                                         
#Name                 Property              string Name () {get} {set}                                                                                                                   
#Object               Property              IDispatch Object () {get}                                                                                                                    
#ParentProjectItem    Property              ProjectItem ParentProjectItem () {get}                                                                                                       
#ProjectItems         Property              ProjectItems ProjectItems () {get}                                                                                                           
#Properties           Property              Properties Properties () {get}                                                                                                               
#Saved                Property              bool Saved () {get} {set}                                                                                                                    
#UniqueName           Property              string UniqueName () {get}                                                                                                                   
#Type                 ScriptProperty        System.Object Type {get=switch ($this.Kind) {...       

我不确定我是否可以通过该$project项目进入 Clean Build 和 Rebuild 方法,或者我是否应该通过定位项目路径直接运行 msbuild。

任何的想法?

4

2 回答 2

15

Visual Studio 的对象模型提供了一种通过SolutionBuild对象构建整个解决方案或单个项目的方法。

从 NuGet 包管理器控制台构建解决方案非常简单。

$dte.Solution.SolutionBuild.Clean($true)
$dte.Solution.SolutionBuild.Build($true)

$true 标志表示命令应该等待清理/构建完成。

构建一个单独的项目并不那么简单。SolutionBuild 对象提供了一个带有三个参数的BuildProject 方法。

$project = Get-Project | select -First 1
$dte.Solution.SolutionBuild.BuildProject("Debug", $project.FullName, $true)

它也不允许您运行 Clean 构建。

如果你想构建一个单独的项目,那么正如 Pavel 所建议的,使用 MSBuild 似乎更直接。

于 2012-08-27T12:38:53.703 回答
5

根据 nuget文档,没有执行此操作的命令。我认为直接运行 msbuild 的最简单方法。

$project = Get-Project | select -First 1
$msbuild = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
& $msbuild $project.FullName /t:Clean`;Build`;Rebuild

基于此,您可以编写您的 PS 模块并将其像 nuget 包一样打包,以便与其他开发人员共享并在其他项目中重用。如何通过 nuget 添加 PS 命令的好例子

于 2012-08-27T08:10:54.657 回答