2008-09-15 19 views
5

ich Visual Studios 2008 der Erweiterbarkeit zu verwenden ist versucht, eine Addin zu schreiben, die einen Projektordner mit verschiedenen Nachrichten in es nach dem Parsen eine Schnittstelle schaffen. Ich habe jedoch Probleme beim Erstellen/Hinzufügen des Ordners. Ich habe versucht, mitVisual Studio Extensibility: Hinzufügen von vorhandenen Ordnern zu einem Projekt

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

(Artikel ist meine Zieldatei neben der ich einen Ordner mit dem gleichen Namen zu schaffen, sondern „Nachrichten“ angefügt), aber es Drosseln, wenn ein Ordner bereits vorhanden ist (keine große Überraschung).

ich es versucht zu löschen, wenn es bereits vorhanden ist, wie zum Beispiel:

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

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

Ich kann sehen, dass der Ordner, wenn im Debug gelöscht wird, aber es scheint immer noch der Ordner zu denken, ist immer noch da und stirbt auf Ein Ordner existiert bereits Ausnahme existiert.

Irgendwelche Ideen ???

Danke.

AK

.... Vielleicht ist die Antwort würde programmatisch Auffrischen des Projekts nach dem Löschen liegen in? Wie könnte dies geschehen?

+0

jede Lösung ist damit? irgendwelche Antworten waren hilfreich? – Kiquenet

Antwort

3

Yup, dass es ...

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

Wenn es ein eleganter Weg, dies zu tun, wäre es sehr geschätzt ...

Dank.

0

hier ist eine Idee, die ich gedacht, weil ich schon so lange NAnt benutzen und dachte, es könnte funktionieren.

Öffnen Sie die CSPROJ Datei in einem Texteditor und fügen Sie das Verzeichnis als solche:

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

, wenn ein „ItemGroup“ bereits esists, das ist in Ordnung. Fügen Sie es einfach in ein bestehendes ein. Visual Studio wird nicht wirklich wissen, wie man diesen Eintrag bearbeitet, aber es wird das gesamte Verzeichnis durchsuchen.

bearbeiten zu was auch immer Sie möchten.

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 wird das Verzeichnis und alles unterhalb des Verzeichnisses in das Projekt ein.

2

Das ist mein Ansatz:

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