2010-05-28 4 views
5

Я ищу эквивалент запуска «Файл -> Сохранить все» перед некоторыми макросами Rake.Visual Studio Macro: Как выполнить «Файл -> Сохранить все» программно

То, что я до сих пор:

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 работает отлично, но цикл не сохраняет файлы проекта, как я бы ожидать.

Если я сделаю копию файла в проводнике решений, этот файл не будет включен в файл проекта (.CSPROJ) после запуска Pre_Rake(). Мне все равно придется нажать CTRL-SHIFT-S или Файл -> Сохранить все.

Итак, как сохранить все с помощью Visual Studio Macro?

ответ

8

По-видимому DTE.Documents.SaveAll не сохраняет все открытые документы (возможно, это сохраняет только те, которые принадлежат к открытым проектам). Попробуйте использовать

DTE.ExecuteCommand("File.SaveAll") 

, который точно так же, как и файл -> Сохранить все.

+0

Очень удивительным. Работает как сказано. –

2

Если вы заинтересованы в понимании того, почему цикл не работает, это потому, что мы также должны перебрать элементов проекта:

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

очень круто. Благодарю. –

Смежные вопросы