Wie füge ich einem Projekt in Visual Studio einen vorhandenen Verzeichnisbaum hinzu?

824

Das Problem ist wirklich einfach. Anstatt Ordner in Visual Studio zu erstellen, erstelle ich eine Verzeichnisstruktur für mein Projekt im Dateisystem. Wie füge ich alle Ordner und Dateien in ein Projekt ein, wobei die Struktur erhalten bleibt?

Wenn ich in einem Ordner mit dem Namen "Dienste" eine vorhandene Datei hinzufüge und zu einer Datei in der Verzeichnisstruktur navigiere. Dienste> AccountManagement> CreateAccount.cs wird in Visual Studio folgendermaßen angezeigt: Dienste> CreateAccount.cs. Ich will das nicht.

Ich habe bereits eine komplette Verzeichnisstruktur ausgearbeitet, da ich unsere Kundenentwickler imitiere, die dieselbe Struktur für die Organisation verwenden. Wie füge ich dem Projekt in Visual Studio alle Ordner und Dateien hinzu? Oder muss ich das tun, was die meisten Microsoft-Benutzer tun, und mich damit abfinden und jeden Ordner über Visual Studio neu erstellen?

Brian Leahy
quelle

Antworten:

1438

Sie müssen Ihre Verzeichnisstruktur in Ihr Projektverzeichnis einfügen. Klicken Sie oben in der Toolbox des Projektmappen-Explorers auf das Symbol "Alle Dateien anzeigen". Danach wird das hinzugefügte Verzeichnis angezeigt. Sie müssen dann dieses Verzeichnis auswählen, mit der rechten Maustaste klicken und "In Projekt einschließen" auswählen.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Gant
quelle
150
Gibt es eine Möglichkeit, dies mit einem Verzeichnis (Baum) außerhalb des Projektverzeichnisses zu tun ?
Imre
2
Gibt es eine Möglichkeit, dies für einen Ordner zu tun, der KEIN Unterverzeichnis Ihres Projekts ist? dh: Muss E: \ ProjectX \ project.vcproj den Ordner E: \ Common * .cs enthalten?
Matt Connolly
4
Funktioniert fast. Ich kann den Verzeichnisbaum sehen und mehrere Dateien hinzufügen, aber ich kann kein ganzes Verzeichnis einschließlich Unterbäumen hinzufügen.
ManicBlowfish
5
Das Problem ist, dass es NUR FUNKTIONIERT, wenn Sie den Verzeichnisbaum in Ihrem Visual-Projekt über den Windows Explorer kopieren. Wie können Sie vorgehen, wenn Sie nur auf einige Ordner und Dateien verweisen möchten, die in einem anderen Projekt auf Ihrem Computer enthalten sind?
Hico
5
Ich weiß nur, wie ich dies außerhalb des Projekts tun kann, indem ich einen symbolischen Link verwende ... siehe meine Antwort: stackoverflow.com/a/26537736/835561
Edyn
77

Sie können den Ordner auch aus dem Windows Explorer in Ihr Visual Studio-Lösungsfenster ziehen und dort ablegen .

Todd Smith
quelle
14
Dies funktioniert in meiner Installation von VS 2010 unter Vista Ultimate 64 Bit nicht.
John Melville
13
Nein, funktioniert auch in meiner VS 2010-Installation unter Windows 7 nicht.
AH.
9
Bestätigen, dass dies auch in VS 2010 (Nicht-Administrator-Modus) nicht funktioniert
David Gardiner
9
Ich glaube nicht, dass ihr es richtig macht. VS 2010 unterstützt das Ziehen und Ablegen von Ordnern. Ich mache es die ganze Zeit, um meine Tool-Kits einzuschließen. Sie müssen sicherstellen, dass Sie in den Projektbaum fallen. Das Lösungsfenster und der Lösungsknoten selbst erhalten den Drop nicht. Das Betriebssystem spielt hier keine Rolle, aber für Zweifler verwende ich Windows 7 64-Bit.
Gavin Williams
4
"Lösungselemente" unterscheiden sich vom Hinzufügen von Elementen zu einem Projekt. Lösungselemente sind ein spezieller Ordner innerhalb der VS-Lösung.
Todd Smith
53

In Visual Studio 2015 machen Sie das so.

Wenn Sie automatisch alle untergeordneten Dateien unter einem bestimmten Ordner einfügen möchten:

<Content Include="Path\To\Folder\**" />

Dies kann so eingeschränkt werden, dass nur Dateien in den angegebenen Pfad aufgenommen werden:

<Content Include="Path\To\Folder\*.*" />

Oder auch nur Dateien mit einer bestimmten Erweiterung:

<Content Include="Path\To\Folder\*.jpg" >

Referenz: http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio

Yuchen Zhong
quelle
3
Ich fand das hilfreich, weil ich dann ein einzelnes Tag für "Kopieren immer beim Erstellen" einfügen konnte, anstatt jede einzelne Datei mit Anmerkungen versehen zu müssen (wie es in der akzeptierten Antwort der Fall war)
Gordon Bean
3
IMO eine der nützlichsten Antworten hier.
Sinjai
Wo wird das hinzugefügt? Wie komme ich zu einer XML-Ansicht in VS?
Matthew Dean
1
Dies ist die beste Lösung, wenn Sie einen großen Hierarchieordner hinzufügen möchten, während Visual Studio nicht reagiert und hängen bleibt.
Gowtham Alan
1
Es ist eine Schande für Microsoft VS Team
Dejjub-AIS
33

Kopieren & Einfügen .

Um einen Ordner, alle Unterverzeichnisse und Dateien hinzuzufügen, können wir auch kopieren und einfügen. Zum Beispiel können wir:

  1. Klicken Sie im Windows Explorer mit der rechten Maustaste auf den Ordner und kopieren Sie auf den Ordner mit vielen Dateien und Ordnern.

  2. Klicken Sie dann im Visual Studio Solution Explorer mit der rechten Maustaste auf den Zielordner und klicken Sie auf Einfügen.

  3. Optional zu TFS hinzufügen; Klicken Sie dann im oberen Ordner mit der rechten Maustaste und checken Sie in TFS ein, um alle Unterordner und Dateien einzuchecken.

Catto
quelle
Dies funktionierte bei mir, aber Drag & Drop funktionierte in VS14 und Windows 10 Pro nicht.
Mona Jalal
1
Drag & Drop funktioniert möglicherweise nur, wenn Sie VS als Administrator
ausführen
18

Sie können einen symbolischen Link verwenden. Dadurch können Sie die Datei in einem Projekt in dem anderen ändern (da es sich tatsächlich um dieselbe Datei handelt).

Um dies zu tun:

  1. Öffnen Sie die cmd-Eingabeaufforderung als Administrator
  2. mklink / d [aktueller Projektverzeichnisname] [Verzeichnis in einem anderen Projekt, auf das es zeigen sollte]

Dies hat seine Nachteile und Fallstricke, aber ich verwende es gelegentlich für doppelte Bibliotheken, die unterschiedliche Namen benötigen.

Für Anoop bearbeiten: Schritte zum Hinzufügen zu Visual Studio:

  1. Erstellen Sie einen Link im Projektordner mit den obigen Schritten.
  2. In Visual Studio ... wählen Sie im Projektmappen-Explorer ein Projekt aus.
  3. Klicken Sie oben im Projektmappen-Explorer auf die Schaltfläche Alle Dateien anzeigen (müssen Sie möglicherweise zweimal darauf klicken, wenn Sie bereits aktiv sind).
  4. Der Link wird nun in Ihrem Projekt angezeigt. Klicken Sie mit der rechten Maustaste und wählen Sie In Projekt einschließen.

Dies sind die Schritte, denen ich folge und die für ein paar verschiedene Projekte arbeiten.

Edyn
quelle
Es funktioniert nicht! Symbolische Links werden nicht als Ordner erkannt
Anoop K. Prabhu
1
@ Anoop: Ich habe Schritte hinzugefügt, um zu zeigen, wie ich diese Methode verwende. Bitte probieren Sie es aus.
Edyn
1
Es funktioniert! Ich habe versucht, eine Verknüpfung zu erstellen, indem ich mit der rechten Maustaste auf den Ordner geklickt habe, anstatt die Eingabeaufforderung zu verwenden. Daher hat dies nicht funktioniert. Das Befolgen der oben beschriebenen Schritte behebt das Problem. Vielen Dank
Anoop K. Prabhu
1
Hinweis: mklink funktioniert in einem FAT-Dateisystem nicht. Es ist für NTFS.
Adrian
Die Quellcodeverwaltung wird mit symbolischen Links Chaos anrichten. Git benötigt Administratorrechte oder checkt nur die Datei ein.
CAD Kerl
13

In Visual Studio 2017 wechseln Sie zwischen der Lösungsansicht und der Ordneransicht hin und her. Ich denke, dies ist eine bessere Option, da dadurch die Lösung sauberer bleibt. Ich benutze dies, um .gitignore-, .md-Dateien usw. zu bearbeiten.

Lösungsansicht und Ordneransicht

Siavash Mortazavi
quelle
5
Die Frage ist, wie Sie einen vorhandenen Ordner zur Lösung hinzufügen und nicht nur Ordner anzeigen.
CShark
1
Dies ist eine wirklich gute Option, um die tatsächliche Struktur anzuzeigen, einen Ordner im Datei-Explorer zu öffnen usw. - aber leider können Sie keinen vorhandenen Ordnerbaum aus der Ordneransicht hinzufügen. Dies ist nur in der Lösungsansicht möglich, wie Gant es beschrieben hat.
Matt
12

Um die Antwort von Yuchen zu erweitern , können Sie Dateien und Pfade als Link einfügen. Dies ist nicht dasselbe wie das Hinzufügen der vorhandenen Elemente, da keine zusätzliche Kopie in der Ordnerstruktur Ihres Projekts erstellt wird. Es ist nützlich, wenn Sie möchten, dass ein kanonischer Ordner / eine kanonische Datei usw. an vielen verschiedenen Orten verwendet wird, Sie jedoch nur eine Version / Kopie davon verwalten möchten.

Hier ist ein Beispiel dafür, was Sie einer *.csprojDatei hinzufügen können , um den Link zu erstellen

<Compile Include="$(Codez)\z.Libraries\Common\Strings\RegexExtensions.cs">
    <Link>Helpers\RegexExtensions.cs</Link>
</Compile>

<Compile Include="..\..\z.Libraries\MoreLINQ\MoreLinq\ExceptBy.cs">
    <Link>Helpers\ExceptBy.cs</Link>
</Compile>

<Content Include="C:\Codez\Libs\Folder\OtherFolder\**\*.*">
    <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

$(Codez) Ist eine von mir definierte Windows-Umgebungsvariable, können Sie die integrierten Umgebungsvariablen auf dieselbe Weise verwenden.

Die letzte Beispielgruppe besteht aus einer Reihe von Inhaltsdateien, die ich für die endgültige Ausgabe benötige. Weitere Informationen hierzu finden Sie unter https://stackoverflow.com/a/11808911/492 und in anderen Antworten und Links.

Weitere Informationen zu MSBuild finden Sie unter https://msdn.microsoft.com/en-us/library/bb629388.aspx

CAD-Typ
quelle
2
Dies sollte die Antwort sein!
Jurijs Kastanovs
4

Ich glaube, ich habe einen Weg gefunden, dies mit Compile Include = ". \ Code ***. Cs" zu tun. Ich wollte Code rekursiv in meinen Code-Ordner einfügen.

Hier ist das Beispiel für eine Projektdatei.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0" DefaultTargets="BuildTarget">
    <PropertyGroup>
        <OutputType>Library</OutputType>
    </PropertyGroup>
    <PropertyGroup>
        <StartupObject />
    </PropertyGroup>
    <PropertyGroup>
        <RootNamespace>Autogen</RootNamespace>
    </PropertyGroup>
    <ItemGroup>
        <Compile Remove="@(Compile)" />
        <Compile Include=".\Code\**\*.cs" />
    </ItemGroup>
    <Target Name="BuildTarget">
        <Message Text="Build selected" Importance="high"/>
    </Target>
</Project>
RJ Thompson
quelle
2

In Visual Studio 2013 konnte "In Projekt einschließen" nicht funktionieren, wenn ich mit der rechten Maustaste auf einen Ordner klickte. Was funktioniert hat, ist den Ordner zu erweitern, alle Dateien auszuwählen und dann "In Projekt einschließen" zu wählen. Es war ziemlich mühsam, da Sie jeden Ordner einzeln ausführen müssen (aber zumindest können Sie alle Dateien in jedem Ordner auf einmal ausführen), und es scheint, als würde der Dateipfad gespeichert (Sie können dies sehen, indem Sie die Eigenschaften der Datei anzeigen und schauen Sie sich die Option "Relativer Pfad" an.)

Ich hoffe, dass ich damit einige Datendateien in einem Visual Studio Installer-Projekt bereitstellen kann, und es scheint, dass die enthaltenen Dateien aufgenommen und ihre Pfade beibehalten werden.

Malvineous
quelle
0

Soweit ich das beurteilen kann, ist die einzige Möglichkeit, dies in VS2010 zu tun, die Drag & Drop-Methode. Klicken Sie mit der rechten Maustaste auf die Lösung, zu der Sie ein Projekt hinzufügen möchten. Das Anwendungsmenü enthält ein Element zum Hinzufügen. Wenn Sie dies öffnen, stellen Sie fest, dass eine der Optionen darin besteht, der Lösung ein vorhandenes Projekt hinzuzufügen.

Navigieren Sie im folgenden Dialogfeld zu dem Ordner, der die Projektdatei für die Lösung enthält, und wählen Sie ihn aus. VS importiert im Rahmen des Imports dieser Projektdatei auch das gesamte Verzeichnis, und ich gehe davon aus, dass alle untergeordneten Verzeichnisse Teil dieses Projekts sind.

Da hierfür eine vorhandene Projektdatei erforderlich ist, kann ein Verzeichnisbaum erst importiert werden, wenn dieser Baum in ein Projekt konvertiert wurde.

Fenton Smith
quelle
0

Ich fand keine Antwort zu meiner Zufriedenheit und fand es selbst heraus.

Hier ist die Antwort für Sie, wenn Sie Ihrem Projekt externe Quellcodes hinzufügen und nicht den gesamten Code kopieren möchten. Ich habe viele Abhängigkeiten von anderen Git und sie werden stündlich, wenn nicht minutiös aktualisiert. Ich kann nicht jede Stunde kopieren, um die Synchronisierung durchzuführen. Hier ist was Sie tun müssen.

Angenommen, dies ist Struktur:

/ root / projA / src

/ root / projA / enthält

/ root / projB / src

/ root / projB / enthält

/ root / yourProj / src

/ root / yourProj / enthält

  1. Starten Sie Ihre VS-Lösung.
  2. Klicken Sie mit der rechten Maustaste auf den Projektnamen direkt unter der Lösung.
  3. Klicken Sie dann auf "Hinzufügen", "Neuer Filter" und geben Sie den Namen "projA" für projA ein.
  4. Klicken Sie mit der rechten Maustaste auf "projA", klicken Sie auf "Hinzufügen", "Neuer Filter" und geben Sie den Namen "src" ein.
  5. Klicken Sie mit der rechten Maustaste auf "projA", klicken Sie auf "Hinzufügen", "Neuer Filter" und geben Sie den Namen "Includes" ein.
  6. Klicken Sie mit der rechten Maustaste auf "projA" / "src", klicken Sie auf "Hinzufügen", "Vorhandenes Element" und navigieren Sie zu / root / projA / src, um alle Quellcodes oder einen nach dem anderen für die gewünschten hinzuzufügen.
  7. Machen Sie dasselbe für "projA" / "Includes"
  8. Machen Sie dasselbe für projB. Jetzt sind die externen / vorhandenen Projekte außerhalb von Ihnen in Ihrer Lösung / Ihrem Projekt vorhanden. Der VS wird sie zusammen kompilieren. Hier ist ein Trick. Da projA und projB virtuelle Ordner unter Ihrem Projekt sind, findet der Compiler das projA / include möglicherweise nicht.

  9. Wenn das ProjA / Includes nicht gefunden wird, klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Eigenschaften".

  10. Navigieren Sie zu "C / C ++". Bearbeiten Sie "Additional Include Directories", fügen Sie Ihr projA / include als solches hinzu, "../projA/includes", relativer Pfad.

Eine Einschränkung: Wenn doppelte Include- / Header-Dateien vorhanden sind, funktioniert das "Ausschließen aus dem Projekt" in der "Header-Datei" nicht wirklich. Es ist ein Fehler in VS.

Davidj
quelle
0

Visual Studio 2017 und höher unterstützen ein neues leichtes .csprojFormat, das als "SDK-Format" bekannt wurde. Einer von mehreren Vorteilen dieses Formats ist , dass anstatt eine Liste von Dateien und Ordnern enthalten , die sind enthalten , Dateien Wildcard standardmäßig enthalten sind. Daher werden mit diesem neuen Format Ihre Dateien und Ordner, die im Explorer oder in der Befehlszeile hinzugefügt wurden, automatisch abgerufen!

Die .csprojDatei im SDK-Format funktioniert derzeit mit den folgenden Projekttypen :

  • Klassenbibliotheksprojekte

  • Konsolen-Apps

  • ASP.NET Core-Webanwendungen

  • .NET Core-Projekte aller Art

Erstellen Sie ein neues .NET Core- oder .NET Standard-Projekt, um das neue Format zu verwenden. Da die Vorlagen auch in Visual Studio 2019 nicht für das vollständige .NET Framework aktualisiert wurden, wählen Sie zum Erstellen einer .NET-Klassenbibliothek die .NET-Standardbibliotheksvorlage aus und bearbeiten Sie die Projektdatei so, dass sie auf die Framework-Version Ihrer Wahl abzielt ( Das neue Stilprojektformat kann in Visual Studio bearbeitet werden. Klicken Sie einfach im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt und wählen Sie "Projektdatei bearbeiten". Zum Beispiel:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

Weiterführende Literatur:

Stephen Kennedy
quelle