Visual Studio 2010宏问题:
我有一个宏,我可以在另一个宏中执行以更改.aspx文件,如下所示:
DTE.ExecuteCommand("Macros.Abba.Module1.AbbaZabba")
我希望能够为解决方案资源管理器中的文件夹中的所有.aspx文件执行此操作。
例如,我的解决方案资源管理器看起来像:
解决方案'YourSolutionName'
- 项目1
- ParentFolder
--- ChildFolder
我希望能够为子文件夹中的每个.aspx文件运行此宏 - 但是没有非aspx文件。我已经寻找了几天的方法来做到这一点,但似乎没有任何工作,现在我必须在每个文件上手动运行宏,这可能需要一段时间。
我不介意手动放置文件夹名称,也不介意在运行宏之前选择文件夹。我是编码的初学者,所以引用我使用某种方法或其他方法比没有任何方法更有帮助,但没有帮助我稍微解决它。
谢谢
答案 0 :(得分:1)
我最终通过拼接两种不同的方法(一种用于查找文件夹,另一种用于遍历文件)来实现自己的工作。
找到我想要的文件夹就在这里,切换触发宏:
http://msdn.microsoft.com/en-us/library/bb264485(v=vs.80).aspx
迭代宏在这里是有用的答案:
Need Visual Studio macro to add banner to all C# files
最终解决方案:
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宏会关闭并保存文件,但是如果这对任何人都有用,你可以从这篇帖子的第二个链接中了解如何做到这一点。
答案 1 :(得分:0)
查看Visual Studio 2010附带的“AddDirAsSlnFolder”示例宏。看起来它有很多您正在寻找的功能。