1

Visual Studio 2010 宏问题:

我有一个宏,我可以在另一个宏中执行它来更改 .aspx 文件,如下所示:

DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")

我希望能够对解决方案资源管理器中文件夹中的所有 .aspx 文件执行此操作。

例如,我的解决方案资源管理器如下所示:

解决方案“您的解决方案名称”

-项目1

--父文件夹

---子文件夹

而且我希望能够为子文件夹中的每个 .aspx 文件运行此宏 - 但没有非 aspx 文件。我已经寻找了几天的方法来做到这一点,但似乎没有任何效果,现在我必须在每个文件上手动运行宏,这可能需要一段时间。

我不介意手动输入文件夹名称,也不介意在运行宏之前选择文件夹。我是编码方面的初学者,所以推荐我使用某种方法或其他方法比什么都没有帮助,但比帮助我稍微完成它的帮助要小。

谢谢

4

2 回答 2

1

我最终通过拼接两种不同的方法(一种用于查找文件夹,另一种用于遍历文件)来实现自己的工作。

找到我想要的文件夹的一个在这里,切换触发宏:

http://msdn.microsoft.com/en-us/library/bb264485(v=vs.80).aspx

迭代宏是这里有用的答案:

需要 Visual Studio 宏才能将横幅添加到所有 C# 文件

最终的解决方案:

Imports System
Imports System.ComponentModel
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module iterateFolder
  Sub IterateFiles(Optional ByVal dbProjName As String = "")
    Dim project As Project
    Dim parentFolder As String = ""
    Dim courseFolder As String = ""

    If (String.IsNullOrEmpty(dbProjName)) Then
        dbProjName = InputBox("Type the database project name.")
        If (String.IsNullOrEmpty(dbProjName)) Then
            Return
        End If
    End If

    If (String.IsNullOrEmpty(parentFolder)) Then
        parentFolder = InputBox("Type the parent folder name.")
        If (String.IsNullOrEmpty(parentFolder)) Then
            Return
        End If
    End If

    If (String.IsNullOrEmpty(courseFolder)) Then
        courseFolder = InputBox("Type the child folder name.")
        If (String.IsNullOrEmpty(courseFolder)) Then
            Return
        End If
    End If

    For Each project In DTE.Solution
        Dim projectItem As EnvDTE.ProjectItem
        If (dbProjName.Equals(project.Name)) Then
            For Each projectItem In project.ProjectItems()
                If (projectItem.Name = parentFolder) Then
                    Dim subItem As EnvDTE.ProjectItem
                    For Each subItem In projectItem.ProjectItems()
                        If (subItem.Name = courseFolder) Then
                            IterateProjectFiles(subItem.ProjectItems)
                        End If
                    Next
                End If
            Next
        End If
    Next
End Sub
Private Sub IterateProjectFiles(ByVal prjItms As ProjectItems)
    For Each file As ProjectItem In prjItms
        If file.SubProject IsNot Nothing Then
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
            IterateProjectFiles(file.ProjectItems)
        ElseIf file.ProjectItems IsNot Nothing AndAlso file.ProjectItems.Count > 0 Then
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
            IterateProjectFiles(file.ProjectItems)
        Else
            DTE.ExecuteCommand("View.SolutionExplorer")
            If file.Name.EndsWith(".aspx") Then
                file.Open()
                file.Document.Activate()
                DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
            End If
        End If
    Next
End Sub
End Module

您可以硬编码项目和文件夹名称,或者只是其中的一些名称,或者将它们全部留空,具体取决于您需要多少多功能性。

我应该在这里注意 abbazabba 宏执行文件的关闭和保存,但如果这对任何人有用,您可以从本文的第二个链接中获得如何做到这一点。

于 2012-05-01T14:37:52.727 回答
0

看看 Visual Studio 2010 附带的“AddDirAsSlnFolder”示例宏。它看起来有很多您正在寻找的功能。

于 2012-04-30T15:34:51.887 回答