2010-05-28 4 views
5

Je cherche l'équivalent de lancer "Fichier -> Enregistrer tout" avant certaines macros de Rake.Visual Studio Macro: Comment exécuter "Fichier -> Enregistrer tout" par programme

Ce que j'ai à ce jour est:

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 fonctionne très bien, mais la boucle ne sauvegarde pas les fichiers de projet que j'attendre.

Si je fais une copie d'un fichier dans l'explorateur de solution, ce fichier n'est pas inclus dans le fichier de projet (.CSPROJ) après l'exécution de Pre_Rake(). Je devrais toujours appuyer sur CTRL-SHIFT-S ou sur Fichier -> Enregistrer tout. Alors, comment enregistrer tout avec une macro Visual Studio?

Répondre

8

Apparemment, DTE.Documents.SaveAll ne sauvegarde pas tous les documents ouverts (peut-être n'enregistre-t-il que ceux appartenant à des projets ouverts). Essayez d'utiliser

DTE.ExecuteCommand("File.SaveAll") 

exactement comme dans Fichier -> Tout enregistrer.

+0

Très impressionnant. Fonctionne comme dit. –

2

Si vous êtes intéressé à comprendre pourquoi la boucle for n'a pas fonctionné, il est parce que nous avons aussi une boucle à travers les éléments du projet:

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

très cool. Merci. –

Questions connexes