2008-09-15 4 views
5

J'essaie d'utiliser l'extensibilité de Visual Studio 2008 pour écrire un addin qui créera un dossier de projet contenant divers messages après l'analyse d'une interface. J'ai des problèmes à l'étape de créer/ajouter le dossier, cependant. Je l'ai essayé d'utiliserExtensibilité de Visual Studio: ajout de dossiers existants à un projet

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

(article est mon fichier cible à côté de laquelle je crée un dossier avec le même nom, mais « Messages » qui y est annexé) mais il étrangle quand un dossier existe déjà (pas grand surprise).

J'ai essayé de le supprimer si elle existe déjà, par exemple:

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

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

Je peux voir que le dossier est supprimé lors de débogage, mais il reste semble penser que le dossier est toujours là et meurt sur un dossier déjà existe exception.

Des idées ???

Merci.

AK

.... Peut-être la réponse résiderait dans le projet rafraîchissant programme après la suppression? Comment ça pourrait être fait?

+0

toute solution à ce sujet? toutes les réponses ont été utiles? – Kiquenet

Répondre

3

Eh oui, c'était ... il

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

S'il y a une façon plus élégante de le faire, il serait très apprécié ...

Merci.

0

Voici une idée à laquelle j'ai pensé car j'utilise NAnt depuis si longtemps et j'ai pensé que ça pourrait fonctionner.

Ouvrez le fichier .csproj dans un éditeur de texte et ajoutez le répertoire en tant que tel:

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

si un « ItemGroup » esists déjà, c'est très bien. Ajoutez-le simplement dans un existant. Visual Studio ne saura pas vraiment comment éditer cette entrée, mais il scannera tout le répertoire.

éditez ce que vous voulez.

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 ajoutera le répertoire et tout sous le répertoire du projet.

2

Ceci est mon approche:

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