【问题标题】:Get Visual Studio Solution Files and Folders获取 Visual Studio 解决方案文件和文件夹
【发布时间】:2013-07-04 16:38:43
【问题描述】:

我正在尝试开发CustomControl,我需要枚举Solution 中的文件和文件夹。有没有办法做到这一点?

--编辑: 场景是: 实际上,我正在尝试创建一个简单的绑定控件,它仅枚举从指定类继承的类,然后用户可以选择类并将其绑定到相关表单的控件,为此我在设计模式中找不到任何有用的东西,这就是我要求枚举解决方案文件和文件夹的原因。

【问题讨论】:

  • 它是一个文件系统,我认为你可以做到这一点..我一定会试试这个
  • 是的,我知道,但我只想要解决方案中包含的文件。
  • 深入了解文件属性...嗯
  • 你能解释一下你想要做什么,这需要知道解决方案项目的文件结构(用这个信息编辑原始问题)?这似乎是一个非常奇怪的要求,如果你帮助解释你正在尝试做的事情的大局,人们将能够给你更好的答案。有关更多信息,请参阅the XY Problem。您给了我们Y,告诉我们X,我们或许可以为您提供更好的解决方案。
  • 你可以使用EnvDTE API,更多信息可以在这里找到:msdn.microsoft.com/en-us/library/envdte(v=vs.80).aspx或示例在这里:codeproject.com/Articles/36219/Exploring-EnvDTE

标签: c# visual-studio


【解决方案1】:

我认为最好的方法是通过 Visual Studio 扩展 API 中的 EnvDTE 类。有一个很好的内置示例:打开宏资源管理器并导航到 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 示例中。

【讨论】:

    【解决方案2】:

    这将非常简单。

    是的,您可以获得项目解决方案文件的路径,并可以处理其中的文件。

    string solutionPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;
    

    【讨论】:

    • 这将返回整个文件,并且肯定会排除文件和文件夹。
    • 排除的文件和文件夹将仅在 Visual Studio 中显示。文件夹结构中没有排除或包含文件的概念。因此,当您转到此位置时,所有排除和包含的文件都将可用。这样您就可以检索所有文件和文件夹。
    • 这将返回解决方案文件夹路径。并且您必须从中检索想要的文件。
    • 我知道,我的意思是如果我使用基本的文件和文件夹系统,我不想得到排除的文件。我需要一些东西来给我只包含在 vs-structure 中的可用文件和文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2013-09-25
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多