2016-04-30 17 views
0

Ich muss wissen, ob es eine Art Präprozessor-Direktive gibt, oder vielleicht nur einen Trick, der es mir ermöglicht, den Lösungsordner, in dem eine Anwendung kompiliert wurde, in die Anwendung selbst einzubetten.Abrufen des ProjectPath oder SolutionPath im Code

Wir haben ein System, das auf Dateien auf dem lokalen Rechner prüfen muss und wenn sie nicht vorhanden sind, geht und holt sie von einem Remote-Server oder Cloud-Service. Dies muss aus Gründen der Portabilität abstrahiert werden. Wir haben Komponententests, die sicherstellen, dass die Remote-Fetch-and-Store-Logik funktioniert, aber bevor wir auf die Server pushen, muss ich sicherstellen, dass die Leute Ende-zu-Ende lokal testen, also möchte ich einen Dummy-Remote-Datei-Provider haben Das checkt einfach einen anderen Ordner auf dem lokalen Computer ein. Ich möchte keinen bestimmten Pfad (wie C: \ dummy_files) annehmen, noch kann ich annehmen, dass die Dateien relativ zum tatsächlichen Ausführungspfad für die kompilierte Assembly sind (daher wird etwas wie Directory.GetCurrentDirectory() nicht gehen) Arbeit).

Wenn ich weiß, woher die ausführende Anwendung kompiliert wurde, sollten die Dateien relativ zum Lösungsverzeichnis mit dem Quellcode sein. Offensichtlich werde ich Präprozessor-Direktiven verwenden, damit dieser Code nur im Debug-Modus ausgeführt werden kann.

+0

Verwenden Sie NMake: https://msdn.microsoft.com/en-us/library/dd9y37ha.aspx – jdweng

Antwort

1

Betrachten Sie ein Pre-Build-Skript (Projekt -> Eigenschaften -> Ereignisse erstellen -> Ereignis-Befehlszeile), das $(ProjectPath) in eine Textdatei schreibt. Sie können diese Textdatei dann als eingebettete Ressource hinzufügen und mit den Reflection-APIs daraus lesen.

+0

Das war ziemlich nah an dem, was ich vorhatte. Funktioniert großartig, wünschte nur, es gäbe einen direkteren Weg, Build-Parameter zu injizieren. – drz

0

wenn Sie brauchen nur einen Ausführungspfad können Sie:

Environment.CurrentDirectory 
+0

Ich sagte ausdrücklich, ich wollte diese Art von Methode Anruf vermeiden – drz

+0

Hoppla! also ich verstehe es nicht wirklich was du willst. Wie die eingebetteten Dateien und virtuellen Pfad, möchten Sie so etwas? –

0

Bitte versuchen Sie es mit diesem

string wanted_path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())); 
0

versuchen, mit unter

Server.MapPath 

oder

Request.MapPath 
+0

Ich sagte speziell, dass ich diese Art von Funktion vermeiden wollte, die vom Pfad der ausführbaren Datei abhängt und nicht von der Position der Quelldateien. – drz

Verwandte Themen