2009-09-02 5 views
13

Wie kann ich das aktuelle Verzeichnis für eine .NET-Anwendung unter dem Visual Studio-Debugger finden?Suchen des aktuellen Verzeichnisses während der Visual Studio-Debugsitzung?

Update 1. Um klar zu sein: Ich möchte nicht den Code ändern oder Informationen im Programm selbst erhalten - ich möchte nur Informationen über die Anwendung erhalten derzeit debugged.

Während einer .NET-Anwendung Windows Forms (gemischte VB.NET und C# ) Debuggen war ich von dem Ort einer XML-Datei wurde gelesen von nicht sicher. Ich erwartete, dass das aktuelle Verzeichnis das Verzeichnis der Anwendung ist. Jedoch unter Verwendung von Process Explorer, Eigenschaften für das Prozessergebnis in:

D: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \

(Rechtsklick auf Prozess/Eigenschaften/Registerkarte Bild/Aktuelles Verzeichnis).

den Cursor über den Prozess in der Hauptansicht von Process Explorer Schweben offenbart ein anderes Ergebnis (unten für eine Bildschirm sehen):

D: \ dproj \ DTASCall \ DTASuperCharge \ bin \

Was ist richtig?

Starten der Anwendung Standalone zeigt die erwartete aktuellen Verzeichnis,

D: \ dproj \ DTASCall \ DTASuperCharge \ bin \

im Process Explorer Prozesseigenschaften-Fenster.


Kommentierte Screen-Shot von Process Explorer:

Alt text http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

Antwort

4

im Code, rufen Sie die Funktion

System.IO.Directory.GetCurrentDirectory() 

standardmäßig, wenn Sie die Debug-Eigenschaften geändert haben Ihr Projekt, das aktuelle Verzeichnis wird als das bin \ Debug-Verzeichnis Ihres Projekts (von dem die EXE-Datei ausgeführt wird) gestartet.

+0

Was meinst du damit, dass das eigentliche Programm nicht läuft? Das Programm wurde an einem Haltepunkt angehalten, als der Screenshot erstellt wurde. –

+0

Hmmm, ich verstehe was du meinst. Ich habe mich bei dem .vshost geirrt - ich habe gerade das Gleiche überprüft und procexp verfolgt mein aktuelles Arbeitsverzeichnis ohne Probleme. Versuchen Sie, die Ausgabe von System.IO.Directory.GetCurrentDirectory() zu vergleichen - mit den Standard-Projekteinstellungen sollte dies das bin \ Debug-Verzeichnis Ihrer Anwendung sein. Wenn es sich bei der zu lesenden XML-Datei um ein Projektelement handelt, müssen Sie die Eigenschaft "Build Action" auf "Content" und die Eigenschaft "Copy to Output Directory" entsprechend festlegen. Vielleicht lohnt es sich auch, im Stammverzeichnis Ihrer Anwendung statt im aktuellen Verzeichnis zu lesen. – Richard

+0

Das Feld "Arbeitsverzeichnis" auf der Debug-Seite ist leer. Aber auf der Kompilierseite enthält das Feld "Build output path" "bin \". Sollte es leer sein? Dieses Projekt wurde 2003 von Visual Studio erstellt und durchlief seitdem zwei Visual Studio-Updates. Derzeit startet die Anwendung aus dem bin-Verzeichnis, nicht bin/Debug –

22

In Visual Studio können Sie unter den Projekteinstellungen auf der Registerkarte debug das "Arbeitsverzeichnis" festlegen, wenn Sie möchten.

Um das aktuelle Arbeitsverzeichnis im Code oder in unmittelbaren Fenstern in einem Haltepunkt zu bestimmen, versuchen

System.IO.Directory.GetCurrentDirectory() 
+1

Für das Direktfenster: ist es nicht "Debug.Print (System.IO.Directory.GetCurrentDirectory())"? –

+2

Alternative zum Direktfenster: Menü Debug/Quickwatch//Drücken Sie Neuauswerten. Oder geben Sie in die letzte Zeile der Spalte Name eines regulären Überwachungsfensters ein und drücken Sie die Eingabetaste. –

+4

oder im unmittelbaren Fenster, können Sie immer "? System.IO.Directory.GetCurrentDirectory()" –

-3

Der beste Weg ist es, die Anwendung in WinDbg (die Windows-Debugger), dann heften sie an den Prozess laufen und führen Sie den Befehl !handle. Jede geöffnete Datei hat eine zugeordnete Handle.Wenn Sie alle Handles für den entsprechenden Prozess ablegen, sehen Sie den entsprechenden Dateipfad. Hier

ein Beispiel:

!handle 0 f process-id 

Ersetzen Sie den Prozess-ID mit dem Wert des Prozess-ID. Anstelle der Prozess-ID können Sie auch die Prozessadresse verwenden. Wenn das Dateiobjekt nicht angezeigt wird, wurde das Dateihandle bereits geschlossen. In diesem Fall müssen Sie die Handles verfolgen. Dies kann mit dem Befehl !htrace erfolgen.

+0

Philip Riecks Beitrag unten ist die richtige Antwort: "System.IO.Directory.GetCurrentDirectory()" –