我正在尝试开发一个CustomControl
,我需要枚举里面的文件和文件夹Solution
。有没有办法做到这一点?
--编辑: 场景是:实际上我正在尝试创建一个简单的绑定控件,该控件仅枚举从指定类继承的类,然后用户可以选择类并将其绑定到相关表单的控件,为此我做不到在设计模式中找到任何有用的东西,这就是我要求枚举解决方案文件和文件夹的内容。
我正在尝试开发一个CustomControl
,我需要枚举里面的文件和文件夹Solution
。有没有办法做到这一点?
--编辑: 场景是:实际上我正在尝试创建一个简单的绑定控件,该控件仅枚举从指定类继承的类,然后用户可以选择类并将其绑定到相关表单的控件,为此我做不到在设计模式中找到任何有用的东西,这就是我要求枚举解决方案文件和文件夹的内容。
我认为最好的方法是通过EnvDTE
Visual Studio Extension API 中的类。有一个很好的内置示例:打开宏资源管理器并导航到 Utilities/ListProj。然后右键单击并选择“编辑”以显示在 Visual Basic 中实现它的代码。这应该为您提供足够的信息,以便能够在 C# 中复制逻辑(类和方法名称相同)
它的想法很简单——你只需ProjectItems()
递归地枚举成员。每个节点本身可能有更多ProjectItems()
成员
Dim project As Project
project = DTE.ActiveSolutionProjects(0)
ListProjAux(project.ProjectItems(), 0)
Sub ListProjAux(ByVal projectItems As EnvDTE.ProjectItems, ByVal level As Integer)
Dim projectItem As EnvDTE.ProjectItem
For Each projectItem In projectItems
projectItems2 = projectItem.ProjectItems
ListProjAux(projectItems2, level + 1)
Next
End Sub
请注意,我在此示例中省略了一些 null 检查,但它们位于 ListProj 示例中。
这将非常简单。
是的,您可以获得项目解决方案文件的路径,并可以处理其中的文件。
string solutionPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;