Verschieben von Projektdateien in einem .NET-Projekt

8

Es ist nicht Code-bezogen, sondern IDE-bezogen. Ich arbeite an einer .NET-Lösung mit ungefähr 35 verschiedenen Projekten. Diese Projekte müssen in eine neue Ordnerstruktur umorganisiert werden. Warum? Weil etwa 10 davon entfernt werden und der Rest in logischere Einheiten aufgeteilt wird. Eine Möglichkeit besteht darin, eine neue Lösung zu erstellen, Projekte per Drag & Drop in eine neue Ordnerstruktur innerhalb des Windows-Explorers zu verschieben und sie dann der neuen Lösung hinzuzufügen. Um ehrlich zu sein, das klingt dumm!

Gibt es eine Möglichkeit, Projekte aus der IDE heraus in andere Ordner zu verschieben? Ich habe versucht, die Projekte zu "speichern", aber die IDE akzeptiert keinen anderen Ordner.

Es ist irritierend, aber da es ein paar falsche Entscheidungen in Ordnernamen gab, bin ich jetzt mit diesen Namen festgefahren.

Beispiel: Im Moment habe ich einen Projekthauptordner, der untergeordnete Ordner enthält, die "Client", "Server", "Geschäft", "Datenbank" und was auch immer genannt werden. In diesen untergeordneten Ordnern befinden sich weitere untergeordnete Ordner, von denen jeder eine dreistellige Nummer ist. In jedem nummerierten Ordner befindet sich ein Projekt, das auf eine logische Art und Weise benannt wird, wie zB Company.Business.Customers mit zusätzlicher Logik in diesem Projekt. Das Problem ist, dass nicht alle Projekte dieser Namenskonvention folgen und ich halte sie für überholt. Ein Projekt wie Company.Business.Customers sollte sich einfach in einem Ordner namens Company.Business.Customers im Projektstamm befinden, damit es leichter zu erkennen ist. Der Name macht bereits deutlich, dass es sich bei diesem Projekt um eine Business Class handelt. Die klare Aufteilung innerhalb von Client-Klassen, Business-Klassen und was auch immer mehr muss nur innerhalb der Lösung arrangiert werden, aber ich möchte die Dateistruktur abflachen. (Und entfernen Sie einige veraltete Projekte.) Im Grunde reformiere ich nicht, ich räume gerade auf. VS2008 scheint jedoch keine solche Option zu haben ...     
Wim ten Brink 19.07.2010, 13:01
quelle

5 Antworten

0

Ich habe die folgende Lösung verwendet, um mein Problem zu lösen:

  1. Ich habe mit einer neuen, leeren Lösung in einem neuen Ordner begonnen.
  2. Für jedes Projekt, das verschoben werden musste, habe ich den Windows-Explorer verwendet, um einen untergeordneten Ordner im Lösungsordner zu erstellen, diesmal mit dem richtigen Namen.
  3. Ich habe die Projekte von ihrem ursprünglichen Speicherort in ihre neuen Ordner kopiert.
  4. Ich habe alle (verschobenen) existierenden Projekte von ihren neuen Standorten hinzugefügt.
  5. Im Solution Manager habe ich die Projekte in einen besseren Namen umbenannt.
  6. Ich habe die Projekteigenschaften und andere Einstellungen für alle Projekte korrigiert.

Das hat das ganze Projekt recht gut aufgeräumt. Ich habe dann das gesamte Projekt zu Vault (Versionskontrollsystem) hinzugefügt und sobald es in der VSS war, löschte ich den Ordner wieder (tatsächlich umbenannt es zuerst) und holte es aus dem VSS-System zurück, so dass alle veralteten Binärdateien und anderen Müll war auch gegangen. Es ist eine Menge Arbeit, aber das Ergebnis ist genau das, was es benötigt.

    
Wim ten Brink 27.07.2010, 10:37
quelle
6

Starten Sie notepad.exe und öffnen Sie die .sln-Datei. Und starten Sie Windows Explorer, navigieren Sie zum Lösungsverzeichnis. Beobachten Sie, wie der Inhalt der .sln-Datei mit der Lösungsstruktur übereinstimmt. Bearbeiten Sie die Einträge, nehmen Sie die entsprechende Änderung mit Explorer vor. Zuerst sichern.

    
Hans Passant 19.07.2010 13:56
quelle
1

Ich glaube nicht, dass es hier eine einfache Antwort gibt. Ihr Hauptproblem wird sein, dass es Visual Studio (oder .NET) egal ist, ob Sie Klassen haben, die zu einem anderen Root-Namespace gehören, der in einem Projekt sitzt.

Wenn Sie also ein Projekt namens Project.BusinessObjects und ein anderes Projekt namens Project.DataObjects haben, hält Sie nichts davon ab, eine Klasse namens Project.BusinessObjects.User in das Project.DataObjects-Projekt einzufügen.

Ich kenne keine Möglichkeit, all dies ohne viel Handarbeit zu machen. Resharper wird ein wenig helfen, wenn du die 'Namespace-Umbenennung' verwendest, aber du wirst immer noch mit einer Menge Grunzarbeit fertig werden.

    
Jaco Pretorius 19.07.2010 13:37
quelle
1

Seien Sie auch sehr vorsichtig, dies in Verbindung mit Versionskontrollsystemen zu tun. Sie müssen Ihr Versionskontrollsystem wirklich gut kennen, um zu wissen, wie es auf solch ein umfangreiches Refactoring reagieren wird.

Abgesehen davon ist das, was Sie beschreiben, gar nicht so schwierig. Sie müssen die Lösungsdateien und möglicherweise auch die Projektdateien manuell bearbeiten. Möglicherweise müssen Sie ein Projekt aus einer Lösung entfernen und es erneut hinzufügen, wenn es sich im richtigen Verzeichnis befindet.

Ich würde ein Backup machen und dann umgestalten. Ich denke, es ist ein Fehler zu glauben, dass Sie alles, was Sie brauchen, von der IDE aus tun können. Und wenn Sie das tun, was Sie von der IDE in einem Quellcodeverwaltungssystem beschreiben, das die alte Visual SourceSafe-API verwendet, werden Sie garantiert (garantiert) Ihre Bindungen durcheinander bringen, diese API ist einfach nicht zum Verschieben (oder Umbenennen) geeignet Dateien herum in der Art, wie Sie beschreiben. Der beste Weg, dies in diesem Szenario zu tun, besteht darin, alle Quellcode-Kontrollbindungen zu entfernen und dann die reorganisierte Lösung wieder hinzuzufügen.

Es ist nicht so schwierig, Sie müssen sich nur vorbereiten (ein Backup machen) und experimentieren, bis Sie es richtig gemacht haben.

    
Gabriel Magana 19.07.2010 13:45
quelle
1

Ich glaube nicht, dass es eine Möglichkeit gibt, dies in Visual Studio zu tun, und @gmagana weist darauf hin, dass es sehr schwierig sein wird, wenn die Dateien unter Versionskontrolle stehen.

Es ist jedoch möglich, dies manuell zu tun.

Beginnen Sie mit dem Erstellen der neuen, gewünschten Ordnerstruktur - ignorieren Sie die .csproj-Dateien und Lösungsdateien für jetzt und mehr die .cs-Dateien, an denen Sie interessiert sind, in die neue Struktur.

Starten Sie jetzt Visual Studio und erstellen Sie ein neues, leeres Projekt. Wenn Sie verschiedene Arten von Projekten haben, möchten Sie möglicherweise für jeden Typ ein neues, leeres Projekt erstellen. Das wird Sie mit einer leeren CSPROJ-Datei und einer SLN-Datei mit nur einem Projekt belassen.

Kopieren Sie die leere Projektdatei an die Stelle, an der sie benötigt werden, und benennen Sie sie nach Bedarf um. Sie können sie bearbeiten und den Assemblynamen und den Standardnamespace ändern, wenn Sie möchten, oder warten, bis Sie fertig sind, und die Einstellungen mit Visual Studio ändern.

Bearbeiten Sie abschließend die .sln-Datei, und entfernen Sie den Projektabschnitt. Kopieren Sie die leere .sln-Datei dorthin, wo Sie sie haben möchten, und öffnen Sie sie in Visual Studio. Jetzt gehen Sie und fügen Sie jedes Ihrer vorhandenen Projekte der neuen Lösung hinzu.

Klicken Sie in jedem Projekt auf die Schaltfläche "Alle anzeigen" und fügen Sie alle Dateien hinzu, die Sie in die Projektstruktur kopiert haben. Beheben Sie fehlende Abhängigkeiten, ändern Sie die Namespaces und Assemblynamen für das Projekt, und stellen Sie sicher, dass die Codedateien keinen Namespace angeben, den Sie nicht möchten. Wiederholen bis zum Ende.

Sobald Sie die neue Lösung erstellt haben, ist es hilfreich, die DLLs in Reflector zu öffnen, um sicherzustellen, dass Sie keine Namespacedeklarationen in der Codedatei verpasst haben - wenn Sie versuchen, zu einer Zeigen Sie, wo eine 1-1-Übereinstimmung zwischen der DLL und dem Namespace vorhanden ist, oder stellen Sie sicher, dass keine Namespaces zwischen DLLs aufgeteilt sind. Reflector ist Ihr Freund.

Viel Glück.

    
chris 19.07.2010 14:15
quelle

Tags und Links