2010-05-28 7 views
5

Sto cercando l'equivalente di eseguire "File -> Salva tutto" prima di determinate macro di Rake.Visual Studio Macro: Come eseguire "File -> Salva tutto" in modo programmatico

Quello che ho finora è:

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 funziona bene, ma il ciclo non salva il file di progetto come mi sarei aspettato.

Se faccio una copia di un file in Solution Explorer, quel file non è incluso nel file di progetto (.CSPROJ) dopo che Pre_Rake() è stato eseguito. Dovrei comunque premere CTRL-SHIFT-S o File -> Salva tutto.

Quindi, come salvare tutto con una macro di Visual Studio?

risposta

8

Apparentemente DTE.Documents.SaveAll non salva tutti i documenti aperti (forse salva solo quelli appartenenti a progetti aperti). Prova a utilizzare

DTE.ExecuteCommand("File.SaveAll") 

che è esattamente come fare File -> Salva tutto.

+0

Molto impressionante. Funziona come detto. –

2

Se siete interessati a capire il motivo per cui il ciclo For non ha funzionato, è perché abbiamo anche un ciclo tra gli elementi di progetto:

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

molto bello. Grazie. –

Problemi correlati