5 Stimmen

Visual Studio Erweiterbarkeit: Hinzufügen von bestehenden Ordnern zu einem Projekt

Ich versuche, die Erweiterbarkeit von Visual Studio 2008 zu nutzen, um ein Addin zu schreiben, das nach dem Parsen einer Schnittstelle einen Projektordner mit verschiedenen Nachrichten darin erstellt. Ich habe jedoch Probleme bei dem Schritt des Erstellens/Hinzufügens des Ordners. Ich habe versucht, mit

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

(das Element ist meine Zieldatei, neben der ich einen Ordner mit demselben Namen, aber mit angehängtem "Messages", erstelle), aber es bleibt hängen, wenn ein Ordner bereits existiert (keine große Überraschung).

Ich habe versucht, sie zu löschen, wenn sie bereits existiert, z. B.:

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 im Debug-Modus gelöscht wird, aber er ist immer noch scheint zu denken, dass der Ordner noch da ist und stirbt mit einer Existiert-Ausnahme.

Irgendwelche Ideen???

Danke.

AK

.... Liegt die Lösung vielleicht darin, das Projekt nach dem Löschen programmatisch zu aktualisieren? Wie könnte man das machen?

0 Stimmen

Gibt es eine Lösung dafür? War eine Antwort hilfreich?

4voto

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, was sich darunter befindet, dem Projekt hinzugefügt.

3voto

Andrew Punkte 192

Ja, das war's...

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 einen eleganteren Weg gibt, dies zu tun, wäre ich Ihnen sehr dankbar...

Danke.

2voto

isaacfi Punkte 190

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

1voto

Mostafa F.Rad Punkte 182

Ich entwickle gerade eine Erweiterung für Visual Studio 2019 und hatte ein ähnliches Problem. Die auf der folgenden Seite gestellte Frage hat mir geholfen:

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

Wenn der Ordner physisch nicht existiert, können Sie mit AddFolder(folderName) . Wenn der Ordner jedoch nicht im Projekt enthalten ist, während er physisch existiert, müssen Sie den vollständigen Systempfad zum Ordner angeben. ( AddFolder(fullPath) )

0voto

Hier ist eine Idee, die mir eingefallen ist, weil ich NAnt schon so lange benutze und dachte, es könnte funktionieren.

Öffnen Sie die .csproj-Datei in einem Texteditor und fügen Sie das Verzeichnis als solches hinzu:

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

wenn eine "ItemGroup" bereits existiert, ist das in Ordnung. Fügen Sie sie einfach in eine bestehende Gruppe ein. Visual Studio wird nicht wirklich wissen, wie man diesen Eintrag bearbeitet, aber es wird das gesamte Verzeichnis scannen.

bearbeiten, wie Sie möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X