【问题标题】:Running the Clean, Build and Rebuild through the Package Manager Console通过包管理器控制台运行清理、构建和重建
【发布时间】:2012-08-21 16:48:59
【问题描述】:

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

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

$project = Get-Project | select -First 1

当我运行$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。

有什么想法吗?

【问题讨论】:

  • 从包管理器控制台执行此操作的动机是什么?

标签: visual-studio powershell nuget


【解决方案1】:

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

从 NuGet 包管理器控制台直接构建解决方案。

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

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

构建一个单独的项目并不那么简单。 SolutionBuild 对象提供了一个BuildProject method,它接受三个参数。

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

它也不允许您运行干净的构建。

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

【讨论】:

  • 到目前为止我得到的最好的答案之一。非常感谢!
【解决方案2】:

根据 nuget docs,没有执行此操作的命令。我认为最简单的方法是直接运行 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 包一样打包,以便与其他开发人员共享并在其他项目中重用。 Good example how to add PS commands by nuget.

【讨论】:

  • NuGet 文档未显示所有可以执行的可用操作。
  • 我的意思是 nuget 扩展提供的附加命令不多,但是你可以执行所有 PS 命令是这个控制台。通过这种方式从 PS 调用 msbuild 是一种常见的做法。你为什么不想写一个小的 PS 模块并将其打包为 nuget 包?
  • 我会将其放入我的 nuget 个人资料中。我不希望这是一个 nuget 包。此外,您不需要特殊命令。 PMC 提供了非常底层的对象:$dte。你可以从那里做或做很多事情。例如:($dte.Windows | Where { $_.Type -eq "vsWindowTypeSolutionExplorer" }).Object.SelectedItems.Object | select -First 1 给出与Get-Project | select -First 1 相同的结果在这里,我正在寻找是否有对清理、构建和重建操作的本机支持。我希望我很清楚。
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多