2012-08-27 24 views
8

Quiero ejecutar los comandos Limpiar, Construir y Reconstruir a través de la consola del Administrador de paquetes en Visual Studio pero hasta ahora no he podido encontrar cómo.Ejecutando Clean, Build y Rebuild a través de la consola del Administrador de paquetes

El siguiente comando me consigue el primer proyecto dentro de la solución:

$project = Get-Project | select -First 1 

Cuando ejecuto el $project | Get-Member, puedo ver los miembros de $project artículo.

#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) {...  

no estoy seguro si puedo llegar a la generación limpia y reconstruir método a través del elemento $project o si debería ejecutar directamente el msbuild apuntando a la ruta del proyecto.

¿Alguna idea?

+1

¿Cuál es la motivación para hacer esto desde la consola de Package Manager? – manojlds

Respuesta

14

El modelo de objetos de Visual Studio proporciona una forma de compilar toda la solución o un único proyecto a través del objeto SolutionBuild.

La construcción de la solución es sencilla desde la Consola NuGet Package Manager.

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

El indicador $ true indica que el comando debe esperar a que finalice la limpieza/construcción.

Crear un proyecto individual no es tan sencillo. El objeto SolutionBuild proporciona un BuildProject method que toma tres parámetros.

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

Tampoco le permite ejecutar una compilación Clean.

Si desea construir un proyecto individual, entonces, como sugiere Pavel, usar MSBuild parece ser más directo.

+0

Una de las mejores respuestas que tengo hasta ahora. ¡Muchas gracias! – tugberk

3

Según nuget docs no hay comandos para realizar estas acciones. Creo que la forma más sencilla de ejecutar msbuild directamente.

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

En base a esta se puede escribir el módulo PS y el paquete como paquete Nuget compartirlo con otros desarrolladores y reutilización en otros proyectos. Good example how to add PS commands by nuget.

+0

NuGet docs no muestra todas las acciones disponibles que se pueden hacer. – tugberk

+0

Quiero decir que la extensión nuget proporciona no demasiados comandos adicionales, pero puede ejecutar todos los comandos PS en esta consola. Y es una práctica común llamar a msbuild desde PS por este camino. ¿Por qué no quieres escribir un pequeño módulo de PS y empacarlo como un paquete nuget? –

+0

Lo pondré en mi perfil nuget. No quiero esto como un paquete nuget. Además, no necesitas comandos especiales. PMC proporciona el objeto de nivel muy bajo: $ dte. Puedes hacer o llegar a muchas cosas desde allí. E.g: '($ dte.Windows | Where {$ _. Type -eq" vsWindowTypeSolutionExplorer "}). Object.SelectedItems.Object | select -First 1' da el mismo resultado que 'Get-Project | seleccione -Primero 1' Aquí, estoy buscando si hay un soporte nativo o no para las acciones de Limpiar, Construir y Reconstruir. Espero que esté claro. – tugberk

Cuestiones relacionadas