Visual Studio宏:如何以编程方式执行“文件 - >全部保存”

时间:2010-05-28 20:32:13

标签: visual-studio macros

我正在寻找相当于在某些Rake宏之前运行“File - > Save All”。

到目前为止我所拥有的是:

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循环不会像我期望的那样保存项目文件。

如果我在解决方案资源管理器中制作文件的副本,则在运行Pre_Rake()之后,该文件不会包含在项目文件(.CSPROJ)中。我仍然需要按CTRL-SHIFT-S或文件 - >全部保存。

那么,如何使用Visual Studio宏保存所有内容?

2 个答案:

答案 0 :(得分:8)

显然DTE.Documents.SaveAll不保存所有打开的文档(可能只保存属于打开项目的文档)。尝试使用

DTE.ExecuteCommand("File.SaveAll")

就像做文件一样 - >全部保存。

答案 1 :(得分:2)

如果您有兴趣了解为什么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