2010-05-28 11 views
5

Estoy buscando el equivalente a ejecutar "Archivo -> Guardar todo" antes de ciertas macros de Rake.Macro de Visual Studio: Cómo realizar "Archivo -> Guardar todo" programáticamente

Lo que tengo hasta ahora es:

Private Sub Pre_Rake() 
     Dim i As Integer 

     DTE.Documents.SaveAll() 

     For i = 1 To DTE.Solution.Projects.Count 
      If Not DTE.Solution.Projects.Item(i).Saved Then 
       DTE.Solution.Projects.Item(i).Save() 
      End If 
     Next 
End Sub 

DTE.Documents.SaveAll funciona bien, pero el bucle no guarda los archivos de proyecto de lo que cabe esperar.

Si hago una copia de un archivo en el explorador de soluciones, ese archivo no se incluye en el archivo de proyecto (.CSPROJ) después de ejecutar Pre_Rake(). Todavía tendría que presionar CTRL-SHIFT-S o Archivo -> Guardar todo.

Entonces, ¿cómo guardar todo con una macro de Visual Studio?

Respuesta

8

Aparentemente DTE.Documents.SaveAll no guarda todos los documentos abiertos (quizás guarda solo los que pertenecen a proyectos abiertos). Intente utilizar

DTE.ExecuteCommand("File.SaveAll") 

que es exactamente como hacer Archivo -> Guardar todo.

+0

muy impresionante. Funciona como se dijo. –

2

Si usted está interesado en la comprensión de por qué el bucle For no funcionó, es porque también tenemos que recorrer los elementos del proyecto:

Sub SaveAllFiles() 
    For i = 1 To DTE.Solution.Projects.Count 
     If Not DTE.Solution.Projects.Item(i).Saved Then 
      DTE.Solution.Projects.Item(i).Save() 
     End If 
     For j = 1 To DTE.Solution.Projects.Item(i).ProjectItems.Count 
      If Not DTE.Solution.Projects.Item(i).ProjectItems.Item(j).Saved Then 
       DTE.Solution.Projects.Item(i).ProjectItems.Item(j).Save() 
      End If 
     Next 
    Next 
End Sub 
+0

muy bueno. Gracias. –

Cuestiones relacionadas