Visual Studio Solutions-Ordner als echte Ordner

117

Ich habe eine Visual Studio-Lösung. Derzeit ist es eine leere Lösung (= keine Projekte) und ich habe einige Lösungsordner hinzugefügt.

Lösungsordner scheinen nur "virtuelle Ordner" zu sein, da sie nicht wirklich im Dateisystem erstellt werden und sich Dateien in Lösungsordnern nur im selben Ordner wie die SLN-Datei befinden.

Gibt es eine Einstellung, die ich übersehen habe und die Visual Studio anweist, Lösungsordner als "echte" Ordner zu behandeln, dh sie im Dateisystem zu erstellen und Dateien darin zu verschieben, wenn ich sie innerhalb der Lösung in einen dieser Ordner verschiebe?

Edit: Danke. Dann mache ich einen Vorschlag für VS2010 :)

Michael Stum
quelle
51
Dies ist eine der nervigsten Macken von Visual Studio
Andy White
Wie kann ich mit dieser Eigenart richtig umgehen?
Hellboy
Lustige Sache, Rider hat diese Funktion (aber der Ordner muss sich auf demselben Pfad wie die SLN-Datei befinden und die tatsächliche Ordnerreferenz wird nicht in der SLN-Datei selbst gespeichert): jetbrains.com/help/rider/Extending_Your_Solution. html
rsenna
Ich verwende VS 2017 und soweit ich das beurteilen kann, hat MS noch keine Funktion hinzugefügt, mit der ganze Ordner zu einem Lösungsordner hinzugefügt werden können. Einzelne Dateien müssen hinzugefügt werden.
Theo

Antworten:

42

Keine spezielle Einstellung. Ich denke nicht, dass es unterstützt wird.

Sie können echte Ordner in einem "Projekt" innerhalb der Lösung erstellen, jedoch nicht in der Lösung selbst.

svlists
quelle
1
Dies scheint ab VS 2017 immer noch korrekt zu sein.
Theo
2
... und VS 2019
Whymatter
eines der schlimmsten Dinge über VS. Warum behält MS Sln-Ordner nicht als Option bei, sondern erlaubt AUCH das Hinzufügen von REAL-Ordnern zur Lösung. So nervig. Das Dateisystem funktioniert, warum das Rad neu erfinden (als Quadrat).
MemeDeveloper
46

Es gibt eine Problemumgehung, die sich tatsächlich wie erwartet verhält .

  1. Fügen Sie der Lösung eine neue oder vorhandene Website hinzu . (Normalerweise erstelle ich eine neue.)
  2. Stellen Sie einfach sicher, dass es in Ihrem Lösungsordner erstellt wurde. (Manchmal erstelle ich sogar einen "Link" zu einem externen Ordner, z. B. "Docs" oder "Marketing" auf einer Netzwerkfreigabe. In diesem Fall wird er von Git natürlich ignoriert.)
  3. Stellen Sie sicher, dass Sie zu den "Projekteinstellungen" oder zum Konfigurationsmanager gehen, um diese "Website" von Build and Deploy auszuschließen !

Getan. Jetzt spiegelt der Projektmappen-Explorer alle Änderungen im Dateisystem wider und umgekehrt (einschließlich Unterordner).

Ich (vermisse) benutze es für Spezifikationen, Dokumente, PM und einige DevOps-Skripte, die im Team geteilt werden. Es ist einfach zu entscheiden, was in die Quellcodeverwaltung einbezogen werden soll oder nicht, und (wenn es richtig eingerichtet ist) steht es nicht in Konflikt mit dem Build.

Ich weiß, dass die Funktion nicht für diesen Anwendungsfall vorgesehen ist, aber bis auf das möglicherweise irreführende "Projekt" -Symbol habe ich noch keinen Mangel an diesem Hack gefunden. Und es gibt immer noch Anwendungsfälle, in denen die von VS bereitgestellten klassischen (virtuellen) Lösungsordner in das Bild passen. Was denken Sie?

Michael
quelle
4
Hier sind die vollständigen Anweisungen: Klicken Sie mit der rechten Maustaste auf die Lösung -> "Hinzufügen" -> "Neue Website ..." -> (ich habe "ASP.NET Empty Web Site" gewählt). Vergessen Sie nach dem Ändern des Speicherorts nicht, "\ MyName" an den Pfad anzuhängen. Andernfalls wird der Dialog durch erneutes Klicken auf "OK" einfach erneut geöffnet. Klicken Sie anschließend mit der rechten Maustaste auf Ihre Lösung -> "Eigenschaften" -> "Konfigurationseigenschaften" -> deaktivieren Sie "Erstellen" für das Webprojekt.
user764754
Funktioniert das noch mit VS2015, aber es funktioniert nicht.
Jan Paolo Go
In VS2017 wird perfekt ein echter Ordner erstellt, aber das WebSite-Symbol (dunkler Kreis) wird im Projektmappen-Explorer angezeigt. Weiß jemand, wie man das behebt?
Andrei Karcheuski
Ja, es funktioniert in VS2019, überwacht jedoch immer noch keine Änderungen des Dateisystems. Sie müssen gelegentlich "Aktualisieren", um aktuelle Dateien anzuzeigen. Wenn nur C # -Projekte nicht der einzige Lösungstyp wären, der das neue, sauberere und klarere Dateisystem-Glob-basierte .*projFormat unterstützt.
Shannon
31

Klicken Sie in Visual Studio 2017 im Projektmappen-Explorer auf das Symbol "Lösungen und Ordner". Diese Schaltfläche wechselt von der virtuellen "Lösungs" -Ansicht in eine "Quellansicht", die dem Layout von Ordnern und Dateien im Dateisystem entspricht. Wenn Sie einen neuen Ordner hinzufügen, wird der Ordner physisch am erwarteten Speicherort erstellt. Lösungen und Ordner.

OdeToCode
quelle
Dies ist nützlich, aber in der "Quellansicht" haben Sie alle Rechtsklick-Verknüpfungen für ein Projekt verloren, dh "NuGet-Pakete verwalten".
David Liang
1
Warum verhalten sich nur C ++ - Lösungen oder -Projekte anders als andere Sprachen?
Freundlicher Geist
Dies hat mir geholfen, also habe ich einen Ordner in der Ordneransicht erstellt, in der ich ihn haben wollte. Dann habe ich einen Lösungsordner hinzugefügt und das Projekt als untergeordnetes Element des Ordners hinzugefügt. Macht für mich keinen Sinn, aber diese Antwort hat mir geholfen
hanzolo
Genau das will ich. Vielen Dank!
user1633272
10

Die gewählte Antwort legt nahe, dass es möglich wäre, tatsächliche Projekte anstelle von Lösungsordnern zu verwenden, erklärt jedoch nicht wirklich, wie. Ich denke, was ich hier beschreibe, ist möglicherweise der am wenigsten umständliche Weg, dies zu erreichen ... :-P

Das Problem mit regulären Projektdateien ist, dass sie schließlich von kompiliert werden MSBUILD. Und wenn Sie ein Projekt haben möchten, das nur nicht kompilierbare Dateien enthält, ist dies ein Problem.

Vor einiger Zeit hat Visual Studio einen neuen Projekttyp eingeführt: Shared Project (Erweiterung .shproj). Dieser Projekttyp wird nicht standardmäßig kompiliert, sondern nur, wenn (und nur wenn) er von einem anderen Projekt referenziert wird.

Ein Teil des Tricks besteht darin , gemeinsam genutzte Projekte anstelle von Lösungsordnern zu verwenden . Es ist natürlich möglich , ein gemeinsames Projekt hinzuzufügen, wird nie von einem anderen Projekt verwiesen wird , bedeutet , dass wir das Problem oben dargestellten vermeiden können.

Mithilfe der <None Include="**/*" />Klausel in der .shproj-Datei können wir dann festlegen, dass alle neuen Dateien und / oder Unterordner automatisch wiedergegeben werden .

Machen Sie also im Grunde Folgendes:

  • Erstellen Sie einen neuen Ordner in Ihrer Lösung.
  • Fügen Sie eine neue .shproj-Datei im Stammverzeichnis dieses neuen Ordners hinzu.
  • Verweisen Sie auf die neue .shproj in Ihrer Lösung.

In meinem Fall habe ich beispielsweise eine DockerDev.shproj erstellt, damit ich einige Docker-bezogene Skripte gruppieren kann, die wir nur auf unseren Entwicklungsmaschinen ausführen:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

Diese .shproj-Datei verfolgt jede Datei in einem beliebigen Unterordner dieses neuen DockerDevOrdners in meiner Lösung.

Soweit ich sehen konnte, funktioniert diese Lösung ziemlich genau wie vom OP angefordert: Sie funktioniert als nicht kompilierbarer Verweis auf einen Ordner und spiegelt automatisch alle daran vorgenommenen Änderungen wider.

rsenna
quelle
Nach meiner Erfahrung sammelt sich dabei Cruft an, sobald ein ahnungsloses Teammitglied Dateieigenschaften berührt. Danach werden im Navigationsbereich doppelte Dateien angezeigt. Unter bestimmten Umständen wird jede Datei in der .proj-Datei aufgelistet, und dann kommt es zu Hässlichkeit. Obwohl ich nicht gerne aufgeben möchte, bevorzuge ich den Ansatz "Vorhandene Website hinzufügen".
Shannon
@shannon Ich habe das von Ihnen erwähnte Verhalten nie erlebt, aber "das Fehlen von Beweisen ist kein Beweis für das Fehlen", also gibt es das. Aber ich benutze täglich gemeinsame Projekte, daher denke ich, dass dies auch zählt. In Bezug auf Website-Projekte (WSP) könnten sie auch funktionieren, ich glaube, ich benutze sie schon lange nicht mehr.
Rsenna
8

Sara Ford hat ein Makro beigesteuert, um dies hinzuzufügen. Wenn Sie in Visual Studio 2010 Ihren Makro-Explorer öffnen, wird ein Makro mit dem Namen "GenerateSlnFolderOnDirStructure" angezeigt. Dadurch wird die Erstellung der Lösungsordner automatisiert und die Dateien hinzugefügt.

SwampyFox
quelle
5

Ordner zum Lösungsordner Von Cecilia Wirén - CeciliaSHARP

Entfernen Sie den Aufwand, mehrere Dateien zum Lösungsordner hinzuzufügen. Verwenden Sie einfach das Kontextmenü für die Lösung und direkt unter der Option zum Erstellen eines neuen Lösungsordners finden Sie jetzt "Ordner als Lösungsordner hinzufügen". Dadurch wird ein Lösungsordner mit demselben Namen erstellt, den Sie ausgewählt haben, und die Elemente in diesem Ordner werden dem Lösungsordner hinzugefügt. Dadurch werden die Dateien auf der Festplatte nicht verschoben.

Ryan
quelle
3

Nein, es wird nicht unterstützt. Wie Sie vermutet haben, sind Lösungsordner einfach virtuelle Untereinträge in der SLN-Datei, die nichts mit dem Dateisystem zu tun haben.

Alan
quelle
3

Visual Studio unterstützt dies nicht. Ich habe eine Erweiterung erstellt, die für VS2013 etwas Ähnliches tut. Es ordnet Lösungsordner physischen Ordnern auf Ihrer Festplatte zu, obwohl die Zuordnung eine Möglichkeit ist (von der Festplatte zur Lösung). Das bedeutet, dass der Inhalt eines Lösungsordners den Inhalt des Festplattenordners widerspiegelt und nicht umgekehrt.

Wenn dies nicht im Weg ist, kann die Erweiterung dennoch nützlich sein. Es unterstützt das Zuordnen von Lösungsordnern zu physischen Ordnern, das Filtern von Dateien und Verzeichnissen basierend auf regulären Ausdrücken und das Speichern von Zuordnungen in Ihrer SLN-Datei. Die Eigenschaften sind nicht aufdringlich, sodass Entwickler ohne Erweiterung die SLN weiterhin öffnen können und nicht betroffen sind.

Gehostet in der Visual Studio-Galerie: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Bearbeiten: Auf Bitbucket hochgeladen. Jetzt Open Source. MIT-Lizenz. https://bitbucket.org/LSS_NorthWind/physical-solution-folders

Nordwind
quelle
3

Hinweis: Ja, dies ist möglich. Sie können einen Ordner im Stammverzeichnis erstellen, aber es ist ein bisschen schwierig.

Wenn Sie zusätzliche Anstrengungen unternehmen, können Sie dies tun. Wie? Folgen wir dem Schritt ...

  • 1-Ordner erstellen, zB: " Neuer Ordner " im Stammverzeichnis (wo sich Ihre SLN-Datei befindet).
  • 2.Kopieren Sie Ihre Projekte und fügen Sie sie in den Ordner ein.
  • 3. Gehen Sie zu Ihrer SLN-Datei und suchen Sie nach verschobenen Projekten. Fügen Sie den neuen Ordner \ in die Adresse des verschobenen Projekts ein.
  • 4.Speichern Sie die SLN-Datei.
  • 5.Öffnen Sie Ihr Projekt und übernehmen Sie das Repository in git oder so ...
  • 6. Nehmen Sie das Repository an einem neuen Ort.

    Du bist fertig...

Wenn Sie Ihren Ordner immer noch nicht sehen können -----

  • 1. Fügen Sie einen Lösungsordner xyz hinzu.
  • 2.Öffnen Sie die SLN-Datei und ändern Sie diesen Ordnernamen mit Ihrem Ordnernamen.

Herzlichen Glückwunsch, Sie sind fertig ..

Wenn Sie auf ein Problem stoßen, schreiben Sie mir einfach um Hilfe.

Ankit
quelle
3

Erstellen Sie "Lösungsordner". Dadurch wird ein logischer Ordner erstellt, jedoch kein physischer. Klicken Sie mit der rechten Maustaste auf den Lösungsordner und öffnen Sie einen neuen Projektdialog. Bevor Sie jedoch auf OK klicken, müssen Sie einen Projektspeicherort in den gewünschten physischen Ordner ändern. VS erstellt ihn und platziert das Projekt darin.

rc21
quelle
1

Sie können echte Ordner hinzufügen, indem Sie "Neuen Filter hinzufügen" für eine Visual Studio-Projektdatei auswählen. Sie können auch "Neuen Filter hinzufügen" unter einem vorhandenen Ordner ausführen. Benennen Sie den Ordner nach dem Erstellen um und fügen Sie eine Quell- oder Header-Datei oder eine Datei hinzu, die zu Ihrem Projekt passt. Dies ist eine mir bekannte Möglichkeit, mit der wir über die Visual Studio-IDE echte Ordner erstellen können.

Abhijit K Rao
quelle
Diese Funktion ist spezifisch für C ++ - Projekte.
Tamir Daniely
Diese Lösung gilt auch für VS-Projekte - die Frage betrifft Ordner auf Lösungsebene.
Theo
0

Der unter der Lösung erstellte Ordner ist wie gesagt virtuell. Möglicherweise wird dies als Problemumgehung bezeichnet, aber Sie können den Ordner entweder vor oder nach dem Hinzufügen eines neuen Elements / Projekts physisch auf der Festplatte erstellen, und Robert sollte ein Geschwister Ihres Vaters sein.

Bei näherer Betrachtung sollte ich vielleicht erklären, dass "Bob ist dein Onkel" deine Geldstrafe / Sortierung bedeutet.

Taube
quelle
Ist es wichtig, ob Robert der Bruder deiner Mutter ist?
Darrel Lee
0

Ich wollte diese Funktion selbst ein paar Mal, aber am Ende des Tages möchten Sie wirklich NICHT die Fähigkeit, dies zu tun. Stellen Sie sich Ihre Lösung (Datei) als Stamm einer Webanwendung vor und stellen Sie sich Lösungsordner als virtuelle Verzeichnisse vor (wörtlich und funktional). Der Inhalt eines virtuellen Webverzeichnisses kann sich physisch auf einem anderen Server befinden. In Visual Studio wurde das Konzept der Lösungsordner durcheinander gebracht, indem Sie neue Dateien im Ordner erstellen konnten. Sie sollten beim Hinzufügen von Inhalten immer "Vorhandene hinzufügen". Wenn Sie vorhandene hinzufügen, wird ein Link zum Quellspeicherort der Datei erstellt.

Der Grund, warum Sie nicht möchten, dass sich Lösungsordner wie "physische" Ordner verhalten, liegt darin, dass Ihr Lösungslayout möglicherweise nicht unbedingt dieselbe Konvention wie Ihr Versionsverwaltungslayout verwendet. Mit Lösungsordnern können Sie die Hierarchie Ihrer Projekte so anpassen, dass Sie Projekte und Elemente nach Belieben gruppieren und dann entscheiden können, dass sie Ihnen nicht gefallen, und sie erneut ändern, ohne den Albtraum des Verschiebens von Quellcodeverwaltungselementen durchlaufen zu müssen herum und irritiert den Rest Ihres Teams.

Paul Ostern
quelle
1
Dies ist die richtige Antwort: Erstellen Sie die Datei auf der Festplatte in einem Ordner mit demselben Namen wie der virtuelle Ordner und fügen Sie die Datei in VS mithilfe von "Vorhandene hinzufügen" hinzu.
Richard
4
Sie hätten leicht sowohl virtuelle als auch physische Ordner implementieren können. Es ist eindeutig ein Übersehen. Siehe Referenz: jede andere IDE.
Tamir Daniely
6
Ich verstehe überhaupt nicht, warum das Konzept von (IIS) virtuellen Verzeichnissen etwas mit Lösungsordnern zu tun hat. Was das Quellcodeverwaltungsargument betrifft, sehe ich das Problem nicht. Warum würden Dateiverschiebungen den Rest Ihres Teams irritieren? Es ist eine übliche Operation. Und warum sollte sich das Layout der Dateien in der Quellcodeverwaltung vom physischen Layout unterscheiden?
user247702
2
Physikalische Lösung Ordner wäre es einfacher machen (wenn auch nur ein bisschen) moderne Ordnerstrukturen wie zu erstellen NancyFx die , in denen mehrere Projekte in Kategorien fallen mögen src, test, tools, etc. Sie würden auf jeden Fall wollen Sie Ihren Punkt , dass die Entscheidung am Projekt Anfang machen über das Team zu irritieren, aber das gilt für fast jede architektonische Entscheidung.
Eric Eskildsen
3
-1 Mein Anwendungsfall lautet: Manchmal möchten wir der Lösung nur bestimmte Dokumente hinzufügen. Sie werden nicht erstellt, aber in der Quellcodeverwaltung gespeichert. Wir haben normalerweise einen speziellen Ordner für sie. Ich möchte diesen Ordner in meiner Lösung haben - nicht die darin enthaltenen Dateien, sondern den Ordner selbst. Ja, es gibt Möglichkeiten, diese Einschränkung zu umgehen, aber sie sind nicht optimal. Ein tatsächlicher Verweis auf einen Ordner in der Lösung würde einfach funktionieren.
Rsenna
0

Ich habe eine kleine Problemumgehung dafür (es ist nicht großartig, aber es funktioniert).

  1. Erstellen Sie einen Ordner in Ihrer Lösung (dh "Contoso")
  2. Klicken Sie mit der rechten Maustaste auf die Lösung und klicken Sie dann auf "Ordner im Projektmappen-Explorer öffnen".
  3. Erstellen Sie den physischen Ordner (dh "Contoso") im Lösungsverzeichnis
  4. Kopieren / Erstellen von Dateien im physischen Ordner.
  5. Ziehen Sie die Dateien in den virtuellen Ordner im Solution Explorer.

Es ist nicht großartig, weil Sie die Dateiverweise manuell pflegen müssen, aber es funktioniert für mich.

Matthew Layton
quelle