Как программно импортировать дерево папок в файл .csproj (шаблон мастера VSIX C # Visual Studio 17) - PullRequest
0 голосов
/ 14 сентября 2018

Я создал шаблон, который открывает форму перед созданием ресурса (реализовано мастером). В этой форме вы можете вставить путь к папке, и программа должна импортировать этот каталог и все дерево (да, как перетащить папку в проект, но я хочу сделать это программно). В настоящее время я могу импортировать только все файлы в дереве, но все они находятся на одном уровне, и я не могу импортировать папки. Для попытки импортировать папку я создал этот класс:

class REM_Folder_Adder
    {
         private EnvDTE80.DTE2 dte;
         private EnvDTE.Project p;
         //dte = ...
        //

    public REM_Folder_Adder (Object o, EnvDTE.Project project)
    {
        p = project;
        p = dte.Solution.Projects.Item(o);
    }
    //AddFolderAndFiles(project, "My Folder");
    public void CreateFiles(string folderFullName)
    {
        System.IO.File.AppendAllText(System.IO.Path.Combine(folderFullName, "dummy1.cs"), "using System;");
        System.IO.File.AppendAllText(System.IO.Path.Combine(folderFullName, "dummy2.cs"), "using System.Windows.Forms;");
    }

    public void AddFolderAndFiles(string folderName)
    {
        EnvDTE.ProjectItem folder;
        string folderFullName;
        string[] fileFullNames;

        try
        {
            folder = p.ProjectItems.AddFolder(folderName);

            folderFullName = folder.FileNames[0];

            CreateFiles(folderFullName);

            fileFullNames = System.IO.Directory.GetFiles(folderFullName);

            foreach (string fileFullName in fileFullNames)
            {
                folder.ProjectItems.AddFromFile(fileFullName);
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.ToString());
        }
    }  
 }

Теперь мои вопросы: 1) Это правильный / простой способ сделать то, что я хочу сделать? 2) Какой параметр я должен передать как «Объект o» в:

public REM_Folder_Adder (Object o, EnvDTE.Project project)
{
    p = project;
    p = dte.Solution.Projects.Item(o);
}
...