获取Visual Studio解决方案文件和文件夹

3
我正在尝试开发一个CustomControl,并需要枚举解决方案中的文件和文件夹。有没有办法做到这一点?
--编辑: 场景如下: 实际上,我正在尝试创建一个简单的绑定控件,它仅枚举从指定类继承的类,然后用户可以选择类并将其绑定到相关表单的控件上。为此,在设计模式下找不到任何有用的内容,这就是我询问如何枚举解决方案文件和文件夹的原因。

这是一个文件系统,我认为你可以做到这一点。我肯定会尝试的。 - A.T.
深入研究文件属性...嗯 - A.T.
你能解释一下你想做什么需要知道 Solution 项目的文件结构吗?这似乎是一个非常奇怪的请求,如果你能帮助解释一下你想做什么的大局,人们就能给你更好的答案。请参阅 XY 问题 了解更多信息。你给了我们 Y,告诉我们 X,我们可能能够给你一个更好的解决方案。 - Scott Chamberlain
2
你可以使用 EnvDTE API,更多信息可以在这里找到:http://msdn.microsoft.com/en-us/library/envdte(v=vs.80).aspx 或者在这里找到示例:http://www.codeproject.com/Articles/36219/Exploring-EnvDTE - sa_ddam213
@ScottChamberlain,我更新了我的帖子,请看一下。 - Saber Amani
显示剩余2条评论
2个回答

2
我认为最好的方法是通过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

请注意,我在这个例子中省略了一些空值检查,但它们在ListProj示例中。

0

这会非常简单。

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

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

这将返回整个文件以及肯定排除的文件和文件夹。 - Saber Amani
1
排除的文件和文件夹只会在Visual Studio中显示。在文件夹结构中,没有像排除或包含文件的概念。因此,当您进入此位置时,所有排除和包含的文件都将可用。因此,您可以检索所有文件和文件夹。 - Shafiq Abbas
1
这将返回解决方案文件夹路径。然后你需要从中检索所需的文件。 - Shafiq Abbas
我知道这一点,我的意思是如果我使用基本的文件和文件夹系统,我不想得到被排除的文件。我需要一些东西只给我可用的文件和文件夹在vs结构中。 - Saber Amani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接