Добавление файлов и папок в проекты из надстройки в Visual Studio 2010 - PullRequest
2 голосов
/ 27 марта 2012

Добавление файлов и папок в проекты из Addin в Visual Studio 2010

Я могу добавить файл в корневую папку проекта, используя:

ActiveProject.ProjectItems.AddFromFileCopy(tempPath);

Или добавить папку, используя:

ActiveProject.ProjectItems.AddFromDirectory(path);

Но как я могу добавить файл в существующую папку в проектах?Если я использую ActiveProject.ProjectItems.AddFromDirectory (путь);Это будет ошибка "папка существует".

1 Ответ

1 голос
/ 25 декабря 2013

Это немного отрывочно, но вы можете легко сделать это самостоятельно:

Использование:

    string relFilePath = @"MyFolder\output.txt"; // Relative to project root

    string filePath = @"C:\output.txt"; // Place of the file

    activeProject.ProjectItems.AddExistingFile(relFilePath, filePath);

Метод расширения для ProjectItems:

static class ProjectItemExtender
{
    const string folderKindGUID = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}";

    public static ProjectItem AddExistingFile( this ProjectItems projectItemCollection, string relPath, string filePath )
    {
      string[] path = relPath.Split('\\');

      if (path.Length == 0) return null;

      Func<ProjectItem, bool> folderPredicate = (item) => 
          (item.Kind == folderKindGUID && path.FirstOrDefault() == item.Name);

      ProjectItem actItem = projectItemCollection.Cast<ProjectItem>().FirstOrDefault(folderPredicate);

      //Create not existing folders on path
      if (actItem == null && path.Length > 1)
      {
        //Could throw an exception on invalid folder name for example...
        projectItemCollection.AddFolder(path[0]);

        actItem = projectItemCollection.Cast<ProjectItem>().FirstOrDefault(folderPredicate);
      }
      else if (path.Length == 1)
      {
        projectItemCollection.AddFromDirectory(filePath);
      }

      return path.Length == 1 ?
                                  actItem
                              :
                                  actItem.ProjectItems.AddExistingFile(path.Skip(1).Aggregate((working, next) => working + "\\" + next), filePath);
    }
}

Все, что вам нужно сделать, это добавить файл через папку, а не в проект.

...