Visual Studio扩展-如何在SolutionFolder内创建SolutionFolder?

时间:2018-09-16 22:45:09

标签: visual-studio visual-studio-2017 visual-studio-extensions vsix envdte

根据我发现的here,无法在SolutionFolder内添加SolutionFolder:

  

Visual Studio 2005及更高版本允许您将文件夹添加到   解决方案(称为解决方案文件夹),而不仅仅是添加文件夹   到一个项目(Visual Studio .NET已经允许的东西)   2002)。解决方案文件夹可以嵌套,并且属于该文件夹   解决方案(根解决方案文件夹)被建模为EnvDTE.Project,   因此要将子解决方案文件夹添加到您拥有的根解决方案文件夹中   使用EnvDTE.Project.ProjectItems.AddFolder方法。但是这个   方法会导致NotImplementedException。

我现在正在尝试做同样的事情-在撰写博客文章之后的7年,在Visual Studio 2017 15.8.4版中-不幸的是,尝试此操作时我遇到了同样的NotImplementedException。

还有其他方法可以从Visual Studio扩展中创建此类子解决方案文件夹吗?

2 个答案:

答案 0 :(得分:1)

  

Visual Studio扩展-如何在SolutionFolder内创建SolutionFolder?

以下是有关如何从选定文件夹创建解决方案文件夹的扩展,其中还包括该选定文件夹中的文件:Folder To Solution Folder

  

消除了将多个文件添加到解决方案文件夹的麻烦。只需使用   解决方案的上下文菜单,位于选项的下方   创建新的解决方案文件夹,您现在会发现“将文件夹添加为解决方案   夹'。这将创建一个与您同名的解决方案文件夹   选择并将该文件夹内的项目添加到解决方案   夹。这不会移动磁盘上的文件。

您可以从以下位置查看源代码:https://github.com/ceciliasharp/Extension.FolderToSolutionFolder

希望这会有所帮助。

答案 1 :(得分:1)

因此,看来,诀窍是获取要在其中创建子文件夹的SolutionFolder作为 EnvDTE.Project ,然后获取其 Object 属性并将其转换为作为 SolutionFolder

这将为您提供一个对象,您可以在该对象上使用文件夹名称调用“ AddSolutionFolder”。

using EnvDTE;
using EnvDTE80;

Solution2 solution = (Solution2)dte.Solution;

// Adds a SolutionFolder (in the standard way) underneath the Solution and returns
// a Project. That Project object is the same as what you would get when going
// over your solution with solution.Projects and getting the folder you need
Project solutionFolderAsProject = solution.AddSolutionFolder(folder.Name);

SolutionFolder solutionFolderAsSolutionFolder = (SolutionFolder)solutionFolderAsProject.Object;

Project subSolutionFolder = solutionFolderAsSolutionFolder.AddSolutionFolder(item.Name);