Ich habe gelernt, dass ich nur die temporäre Instanz von VS "Attach to Process ..." anhängen und debuggen kann. Also habe ich mir das replacementsDictionary-Objekt angesehen.
Im Gegensatz zu dem, was alle docs sagen, benötigt die Template-Parameter ist eigentlich:
$ SpecifiedSolutionName
$
... und nicht "SpecificSolutionName".
Das ist die Hälfte des Geheimnisses gelöst, aber lass dich davon nicht begeistern. SpecifiedSolutionName tut auch nicht, was die Dokumente sagen, dass es tut.
Von https://docs.microsoft.com/en-us/visualstudio/ide/template-parameters:
Wenn "Lösung Verzeichnis erstellen" nicht aktiviert ist, SpecificSolutionName [sic] ist leer.
Nope. Wenn "create solution directory" nicht aktiviert ist, enthält $ SpecifiedSolutionName $, was auch immer in $ projectname $ ist.
Das wäre für uns genug, wenn das Standardverhalten für ein Lösungsverzeichnis und ein Projektverzeichnis nicht den gleichen Namen hätte. Da dies jedoch häufig vorkommt, kann dieser Wert $ SpecifiedSolutionName $ nicht sagen, ob der Benutzer ein neues Lösungsverzeichnis erstellt hat oder nicht.
So sehe ich immer noch nichts, das direkt meldet, ob der Benutzer dieses Kontrollkästchen ankreuzte oder deaktivierte. Es gibt jedoch eine Logik, durch die Sie springen können, dank eines anderen Template-Parameters namens $ solutiondirectory $.
Das ist auch defekt.
Wenn der Benutzer "Create directory for solution" ankreuzt, ist $ solutiondirectory $ das Verzeichnis, in dem die Lösungsdatei gespeichert wird. Wenn der Benutzer "Create directory for solution" löscht, dann ist $ solutiondirectory $ das Verzeichnis, das das Verzeichnis enthält, in dem sich die Lösungsdatei befindet, und ist daher wahrscheinlich höher im Dateisystem, als Sie möchten.
Was $ solutiondirectory $ Berichte ist eigentlich nur $ Zielverzeichnis $ \ .. \. Das Verzeichnis oberhalb des Verzeichnisses, in dem sich die Datei Projekt befindet. Es spielt keine Rolle, ob "Verzeichnis für Lösung erstellen" aktiviert wurde oder nicht, der $ solutiondirectory $ Parameter kümmert sich um die Projektdatei & Verzeichnis, nicht um die Lösung.
Also zurück zur Frage, woher wissen wir, ob der Benutzer "Create directory for solution" angekreuzt hat, wenn Lösung und Projekt beide den gleichen Namen haben?
Zwei Unrecht machen in diesem Fall fast ein Recht. Vergleichen Sie $ SpecifiedSolutionName $ mit dem endgültigen Pfadelement in $ solutiondirectory $. Wenn diese unterschiedlich sind, hat der Benutzer definitiv "Verzeichnis für Lösung erstellen" deaktiviert. (Weil die ehemaligen wird der Projektname, und dieser wird, was das Dateisystem etwas höher ist.)
Wenn sie gleich sind, hat der Benutzer wahrscheinlich, dass das Feld markiert. Aber es gibt noch eine Sache zu beachten. Vielleicht hat das Verzeichnis aus irgendeinem Grund auch den gleichen Namen wie das Projekt- und/oder Lösungsverzeichnis. Benutzer können so komisch sein. Ich kenne keinen sicheren Weg, um diese Situation zu erklären (vielleicht gibt es mehr Verzeichnisse mit dem gleichen Namen), also überlasse ich es als etwas, auf das ich achten muss.
Und ich habe festgestellt, dass in VS2017, V15.5.4 $ SpecifiedSolutionName $ nicht ersetzt wird, aber $ specifiedsolutionname $ tut. Seufzer. – Dullroar
Wow.Critical für mich, das zu wissen .. Ich werde bald wieder daran arbeiten. Danke für die Berichterstattung. – Xenial