Visual Studio Macro: как выполнить «Файл -> Сохранить все» программно - PullRequest
5 голосов
/ 29 мая 2010

Я ищу эквивалент запуска "Файл -> Сохранить все" перед определенными макросами Rake.

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 30 мая 2010

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

DTE.ExecuteCommand("File.SaveAll")

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

2 голосов
/ 27 июля 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...