Расширяемость Visual Studio: добавление существующих папок в проект

Я пытаюсь использовать расширяемость 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); 

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

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

Спасибо.

AK

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


person Andrew    schedule 15.09.2008    source источник
comment
какое-либо решение по этому поводу? какие-либо ответы были полезны?   -  person Kiquenet    schedule 17.10.2012


Ответы (5)


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

person Community    schedule 07.04.2011

Ага, вот и все ...

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

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

Спасибо.

person Andrew    schedule 15.09.2008

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

//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");
person isaacfi    schedule 28.06.2011

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

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

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

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

отредактируйте все, что захотите.

person Community    schedule 30.07.2009

Я разрабатываю расширение для Visual Studio 2019, и у меня возникла аналогичная проблема. Мне помог вопрос, заданный на следующей странице:

https://social.msdn.microsoft.com/Forums/en-US/f4a4f73b-3e13-40bf-99df-9c1bba8fe44e/include-existing-folder-path-as-project-item?forum=vsx

Если папка физически не существует, вы можете использовать AddFolder(folderName). Но если папка не включена в проект, пока существует физически, вам необходимо указать полный системный путь к папке. (AddFolder(fullPath))

person Mostafa F.Rad    schedule 15.11.2020