2010-01-26 5 views
16

Ich entwickle gerade eine C# -Anwendung, die über eine eigene Protokollierung verfügt. Wenn Ausnahmen ausgelöst werden, wird die Ausnahme in einer Liste gespeichert, die vom Benutzer über eine Listenansicht angezeigt werden kann. Wenn der Benutzer auf eine Ausnahme in der Listenansicht klickt, wird die Stapelverfolgung der Ausnahme in einem Textfeld angezeigt. Aber selbst wenn ich das Programm auf einem Remote-Computer ausführe, zeigt der Stack-Trace die Dateipfade zu den ursprünglichen Quelldateien von der Maschine, auf der die Anwendung kompiliert wurde.Dateipfade der Erstellungsmaschine im Stack-Trace nicht anzeigen

z.B .:

at C:\Folder1\Folder2\Class1.cs:81 
at C:\Folder1\Folder2\Class2.cs:65 
at C:\Folder1\Folder1\Class3.cs:21 

Anzeigen Nur die Quelldateien ohne Ordner wäre schön ...

Wie kann ich dieses Verhalten zu ändern?

Gibt es eine native Lösung? Oder muss ich einfach eine String-Manipulation machen?

+0

Wie sieht Ihr Protokollierungscode aus? – ChrisF

+0

Filtern Sie den Pfad einfach mit einem Regex-Ausdruck. Oder Path.GetFileName(). –

Antwort

5

Die Dateipfade sind in den Dateien "program database" (.pdb) enthalten. Solche Dateien werden während der Kompilierung erstellt, und die Pfade in diesen Dateien entsprechen denen auf dem Kompilierungscomputer.

Sie können die .pdb-Dateien aus Ihrer Installation entfernen, aber auf diese Weise ist Ihr Stack-Trace nur halb so interessant wie jetzt, da er Ihnen nicht die Zeile angibt, in der der Fehler aufgetreten ist. Normalerweise wird Code in der Produktionsumgebung nicht mit angehängten Pdb-Dateien ausgeführt.

Wenn Sie den "interessanten Stack-Trace" beibehalten möchten, können Sie einen String-Ersatz von Ordnernamen in Erwägung ziehen, nachdem Sie exceptionObject.toString() aufgerufen haben.

+0

Danke =). Es hat so funktioniert. – Emiswelt