问题描述
我想编写一个宏以在项目目录中的文件中进行爬网,并找到项目中未包含的文件.
I'd like to write a macro to crawl through the files in my project directory and find files that aren't included in the project.
在玩DTE对象时,我看到Project
对象具有ProjectItems
;如果ProjectItem
代表目录,则它具有自己的ProjectItems
集合.这给了我项目中包含的所有文件.
In playing around with the DTE object, I see that the Project
object has ProjectItems
; if a ProjectItem
represents a directory, then it has its own ProjectItems
collection. This gives me all files that are included in the project.
因此,我可以递归地浏览每个ProjectItems集合,对于每个目录的ProjectItem,请检查文件系统中是否存在没有对应ProjectItem的文件.不过,这似乎很笨拙.
So I could crawl recursively through each ProjectItems collection, and for each ProjectItem that's a directory, check to see if there are files in the file system that don't have a corresponding ProjectItem. This seems clumsy, though.
有什么简单的方法可以解决这个问题吗?
Any ideas of a simpler way to approach this?
推荐答案
感谢@JaredPar和@lpthnc向我指出正确的方向.我最终使用了一种与上面@JaredPar概述的方法非常相似的方法.这是我的工作宏FWIW.
Thanks to @JaredPar and @lpthnc for pointing me in the right direction. I ended up using an approach very similar to what @JaredPar outlines above. Here's my working macro FWIW.
Imports System.IO
Imports System.Collections.Generic
Imports EnvDTE
Public Module Main
Sub IncludeNewFiles()
Dim Count As Integer = 0
For Each Project As Project In DTE.Solution.Projects
If Project.UniqueName.EndsWith(".vbproj") Then
Dim NewFiles As List(Of String) = GetFilesNotInProject(Project)
For Each File In NewFiles
Project.ProjectItems.AddFromFile(File)
Next
Count += NewFiles.Count
End If
Next
DTE.StatusBar.Text = String.Format("{0} new file{1} included in the project.", Count, If(Count = 1, "", "s"))
End Sub
Private Function GetAllProjectFiles(ByVal ProjectItems As ProjectItems, ByVal Extension As String) As List(Of String)
GetAllProjectFiles = New List(Of String)
For Each ProjectItem As ProjectItem In ProjectItems
For i As Integer = 1 To ProjectItem.FileCount
Dim FileName As String = ProjectItem.FileNames(i)
If Path.GetExtension(fileName).ToLower = Extension Then
GetAllProjectFiles.Add(fileName)
End If
Next
GetAllProjectFiles.AddRange(GetAllProjectFiles(ProjectItem.ProjectItems, Extension))
Next
End Function
Private Function GetFilesNotInProject(ByVal Project As Project) As List(Of String)
Dim StartPath As String = Path.GetDirectoryName(Project.FullName)
Dim ProjectFiles As List(Of String) = GetAllProjectFiles(Project.ProjectItems, ".vb")
GetFilesNotInProject = New List(Of String)
For Each file In Directory.GetFiles(StartPath, "*.vb", SearchOption.AllDirectories)
If Not ProjectFiles.Contains(file) Then GetFilesNotInProject.Add(file)
Next
End Function
End Module
这篇关于Visual Studio宏:查找项目中未包含的文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!