2008-09-15 3 views
5

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

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); 

Я могу видеть, что папка будет удален, когда в отладке, но она по-прежнему , кажется, думает папка все еще там и умирает папка уже есть исключение.

Любые идеи ???

Спасибо.

AK

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

+0

любое решение по этому поводу? любые ответы были полезны? – Kiquenet 2012-10-17 10:16:12

ответ

3

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

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); 

Если есть более элегантный способ сделать это, было бы весьма признателен ...

Спасибо.

0

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

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

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

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

отредактируйте что бы вы ни пожелали.

3
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 добавит каталог и все под каталог для проекта.

2

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

//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");