2012-08-27 71 views
8

我想通過Visual Studio中的軟件包管理器控制檯運行Clean,Build和Rebuild命令,但到目前爲止我還找不到如何。通過軟件包管理器控制檯運行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項目重建方法,或者我應該我直接針對項目路徑運行的MSBuild。

有什麼想法?

+1

從軟件包管理器控制檯執行此操作的動機是什麼? – manojlds

回答

14

Visual Studio的對象模型提供了一種通過SolutionBuild對象構建整個解決方案或單個項目的方法。

從NuGet Package Manager Console構建解決方案非常簡單。

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

$ true標誌表示該命令應該等待clean/build完成。

建立一個單獨的項目並不那麼簡單。 SolutionBuild對象提供了一個帶有三個參數的BuildProject method

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

它也不允許您運行Clean構建。

如果你想建立一個單獨的項目,那麼就像Pavel所建議的那樣,使用MSBuild似乎更直接。

+0

迄今爲止我所得到的最佳答案之一。非常感謝! – tugberk

3

根據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

+0

NuGet文檔不顯示可以完成的所有可用操作。 – tugberk

+0

我的意思是nuget擴展提供了不多的附加命令,但是你可以在這個控制檯上執行所有的PS命令。通過這種方式從PS調用msbuild是很常見的做法。你爲什麼不想寫小PS模塊並將它打包爲nuget包? –

+0

我會把它放到我的nuget配置文件中。我不希望這是一個nuget包。另外,你不需要特殊的命令。 PMC提供了非常低級別的對象:$ dte。你可以從那裏做或得到很多東西。例如:'($ dte.Windows | Where {$ _。Type -eq「vsWindowTypeSolutionExplorer」})。Object.SelectedItems.Object |選擇-First 1'給出與'Get-Project |相同的結果選擇-First 1'在這裏,我正在尋找是否有本地支持或不支持Clean,Build和Rebuild動作。我希望我很清楚。 – tugberk

相關問題