2008-09-15 34 views
5

Estoy intentando usar la extensibilidad de Visual Studio 2008 para escribir un complemento que creará una carpeta de proyecto con varios mensajes después de analizar una interfaz. Sin embargo, estoy teniendo problemas en el paso de crear/agregar la carpeta. He intentado usarExtensibilidad de Visual Studio: Agregar carpetas existentes a un proyecto

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

(artículo es mi archivo de destino junto a la que estoy creando una carpeta con el mismo nombre pero con "mensajes" añadido al final) pero se ahoga cuando ya existe una carpeta (no es gran sorpresa).

He intentado eliminarlo si ya existe, como por ejemplo:

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

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

puedo ver que la carpeta se elimina cuando en la depuración, pero todavía parece pensar la carpeta está todavía allí y muere en ya existe una carpeta excepción.

¿Alguna idea ???

Gracias.

AK

.... Tal vez la respuesta estaría en programación refrescante el proyecto después de la eliminación? ¿Cómo puede hacerse esto?

+0

ninguna solución al respecto? cualquier respuesta fue útil? – Kiquenet

Respuesta

3

Sí, eso fue todo ...

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

Si hay una forma más elegante de hacer esto, sería muy apreciado ...

Gracias.

0

he aquí una idea en la que he pensado porque he estado usando NAnt durante tanto tiempo y pensé que podría funcionar.

Abrir el archivo .csproj en un editor de texto y añadir el directorio como tal:

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

si un "ItemGroup" ya esists, eso está bien. Solo agrégalo a uno existente. Visual Studio no sabrá realmente cómo editar esta entrada, pero escaneará todo el directorio.

edita lo que quieras.

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 añadirá el directorio y todo debajo del directorio para el proyecto.

2

Este es mi enfoque:

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