Расширяемость Visual Studio: добавление существующих папок в проект - PullRequest
5 голосов
/ 15 сентября 2008

Я пытаюсь использовать расширяемость Visual Studio 2008 для написания надстройки, которая создаст папку проекта с различными сообщениями в ней после анализа интерфейса. Однако у меня возникли проблемы на этапе создания / добавления папки. Я пытался использовать

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 

(элемент - это мой целевой файл, рядом с которым я создаю папку с тем же именем, но с добавлением к ней сообщения), но она задыхается, когда папка уже существует (ничего удивительного)

Я попытался удалить его, если он уже существует, например:

DirectoryInfo dirInfo = new DirectoryInfo(newDirectoryParent + 
newDirectoryName); 
if (dirInfo.Exists) 
{
    dirInfo.Delete(true);
}

ProjectItem folder = 
item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty); 

Я могу ВИДЕТЬ, что папка удаляется при отладке, но все равно кажется, что папка все еще там и умирает на папке уже существует исключение.

Есть идеи ???

Спасибо.

АК

.... Возможно, ответ заключается в программном обновлении проекта после удаления? Как это можно сделать?

Ответы [ 4 ]

3 голосов
/ 07 апреля 2011
ProjectItem pi = null;
var dir = Path.Combine(
      project.Properties.Item("LocalPath").Value.ToString(), SubdirectoryName);
if (Directory.Exists(dir))
    pi = target.ProjectItems.AddFromDirectory(dir);
else
    pi = target.ProjectItems.AddFolder(dir);

ProjectItems.AddFromDirectory добавит каталог и все, что находится под каталогом, в проект.

3 голосов
/ 15 сентября 2008

Да, это было ...

DirectoryInfo dirInfo = new DirectoryInfo(newDirectoryParent + newDirectoryName);

if (dirInfo.Exists)
{
    dirInfo.Delete(true);
    item.DTE.ExecuteCommand("View.Refresh", string.Empty);
}

ProjectItem folder = item.ProjectItem.Collection.AddFolder(newDirectoryName, string.Empty);

Если бы есть более элегантный способ сделать это, это было бы очень ценно ...

Спасибо.

2 голосов
/ 29 июня 2011

Это мой подход:

//Getting the current project
private DTE2 _applicationObject;
System.Array projs = (System.Array)_applicationObject.ActiveSolutionProjects;
Project proy=(Project)projs.GetValue(0);
//Getting the path
string path=proy.FullName.Substring(0,proy.FullName.LastIndexOf('\\'));
//Valitating if the path exists
bool existsDirectory= Directory.Exists(path + "\\Directory");
//Deleting and creating the Directory
if (existeClasses)
   Directory.Delete(path + "\\Directory", true);
Directory.CreateDirectory(path + "\\Directory");
//Including in the project
proy.ProjectItems.AddFromDirectory(path + "\\Directory");
0 голосов
/ 31 июля 2009

вот идея, о которой я подумал, потому что я так долго использовал NAnt и думал, что это может сработать.

Откройте файл .csproj в текстовом редакторе и добавьте каталог следующим образом:

<ItemGroup>
   <compile include="\path\rootFolderToInclude\**\*.cs" />
</ItemGroup>

если "ItemGroup" уже существует, это нормально. Просто добавьте его в существующий. Visual Studio не знает, как редактировать эту запись, но будет сканировать весь каталог.

отредактируйте что хотите.

...