Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03498.jsonl.gz/1958

Als Programmierer trifft man immer wieder die Situation an, dass man eine neue Solution (bzw. auch nur ein Projekt in der Solution) machen möchte, die aber etliche Ähnlichkeiten zu einer bereits vorhandenen Solution hat. Visual Studio selber bietet keine Duplizier- bzw. Klonfunktion an. Natürlich könnte man nun hingehen, eine neue leere Solution machen, und zumindest die Elemente von der anderen Lösung durch "Hinzufügen->Existierendes Element..." in die neue übernehmen. Danach hat man es aber noch mit einer beträchtlichen Anzahl an Einstellungen zu tun, die man alle gleich wie die alte einstellen müsste. Ein mühsamer und stupider Weg. Mit dem Zeichenkettenjäger™ von Mighty Desktop geht das aber viel einfacher:
- Man macht ein Duplikat des gesamten Solution-Verzeichnisses (bzw. des Projektverzeichnisses)
- Man geht in den Zeichenkettenjäger™-Reiter, gibt das Verzeichnis an und startet eine Suche nach dem Namen des alten Projekts, in Dateiname und Inhalt. Die Boxen 'Gross/Kleinschreibung' und 'Ganzes Wort' sollten angehakt sein.
- Am Ende ist man im Reiter 'Funde'. Dort lässt man die Ersetzungsfunktion alle Funde durch den Namen der neuen Solution ersetzen. Anders als in Ersetzungsfunktionen von anderen Produkten werden im Zeichenkettenjäger™ von Mighty Desktop dabei auch die Dateien umbenannt.
- Nun muss man noch neue GUIDs vergeben für alle Projekte in der Solution. Dazu doppelklickt man in den Funden auf die Dateien "*.sln" und ".csproj", wodurch sie im bevorzugten Texteditor (wir empfehlen Notepad++) angezeigt werden. Bisher hat sich bewährt, die Ersetzungen in der Form "alt -> neu" in einem neuen Fenster in Notepad++ zu notieren.
- In "*.csproj" vergibt man im Tag <ProjectGuid> eine neue GUID. Das kann zB. mit Mighty Desktop im Register Werkzeugkasten gemacht werden. Achtung, nur in <ProjectGuid>, nicht in <ProjectTypeGuids>.
- Im "*.sln" ersetzt man nun die alten GUIDs der Projekte durch die neuen (die letzte GUID auf der Zeile).
Achtung: Man muss die Solution- und Projektfiles noch gut durchschauen, ob sie nicht noch andere GUIDs drin haben. Falls ja, ist es leider etwas schwierig zu entscheiden, ob das nun eine variable GUID ist, denn auch konstante Aufzählungswerte (Enumerations) sind in COM (was hier eingesetzt wird) durch GUIDs repräsentiert. Im Zweifelsfall kann man einfach mal Online nach einer GUID suchen. In der Regel werden die konstanten GUIDs in einem Microsoft-Text gefunden. Testweise kann man auch mal noch in den *.sln und *.csproj per Volltextsuche nach den alten GUIDs suchen, um keine zu verpassen. Leider ist dieser Schritt etwas mühsam und wenn man etwas falsch macht, oder sogar vergisst, kann es sein, dass man sich später einige subtile Probleme aufhalst. Beispielsweise sollte man im Falle von Visual Studio AddIn-Solutions daran denken, dass jedes Menu und jede Menufunktion eine neue GUID bekommen MUSS, sonst kann es sich beim Laden mit den AddIns einer anderen Solution überschneiden.
Nun kommt endlich der grosse Tadaaaa-Moment: Man öffnet die Solution in Visual Studio. Wenn Visual Studio Fehlermeldungen auswirft, hat man etwas falsch gemacht. Man sollte dann nochmals alles genau nachprüfen, was oberhalb beschrieben wurde. Schlimmstenfalls einfach nochmals vorne anfangen und gewissenhaft durcharbeiten. Zum Test kann man die Solution einmal durchkompilieren und starten.
Auch wenn dieses Vorgehen kompliziert erscheint, nach ein paar Malen hat man es im Griff. In jedem Fall erspart es einem eine Unmenge an Zeit, da nun gleich alle Einstellungen, von denen es hunderte gibt, richtig stehen, und nicht langwierige Suchen auslösen, warum jetzt ein anderes Verhalten vorliegt. Man sollte sich immer darüber im Klaren sein, dass die Einstellungen das Resultat von langem zeitaufwändigem Fine-Tuning waren. Darum macht ein Duplizieren auch sehr viel Sinn.
Jeder Programmierer sollte diese Duplizierungs-Prozedur eigentlich im Unterricht gelernt bekommen, bzw. Microsoft sollte eine Duplizier-Funktion ins Visual Studio einbauen.