Anstatt ein externes Programm mit fest codiertem Pfad auszuführen, möchte ich das aktuelle Projektverzeichnis erhalten. Ich rufe ein externes Programm mit einem Prozess in der benutzerdefinierten Aufgabe auf.
Wie würde ich das machen? AppDomain.CurrentDomain.BaseDirectory gibt mir nur den Speicherort von VS 2008 an.
quelle
Wenn ein Projekt auf einem IIS Express ausgeführt wird, kann
Environment.CurrentDirectory
dies darauf verweisen, wo sich IIS Express befindet (der Standardpfad wäre C: \ Programme (x86) \ IIS Express ) und nicht darauf, wo sich Ihr Projekt befindet.Dies ist wahrscheinlich der am besten geeignete Verzeichnispfad für verschiedene Arten von Projekten.
Dies ist die MSDN-Definition.
quelle
Dadurch erhalten Sie auch das Projektverzeichnis, indem Sie vom aktuellen Ausführungsverzeichnis aus zwei Ebenen nach oben navigieren (dies gibt nicht bei jedem Build das Projektverzeichnis zurück, dies ist jedoch das häufigste).
Natürlich möchten Sie dies in einer Art Validierungs- / Fehlerbehandlungslogik enthalten.
quelle
Wenn Sie nicht wissen möchten, in welchem Verzeichnis sich Ihre Lösung befindet, müssen Sie Folgendes tun:
Wenn Sie nur mit
GetCurrrentDirectory()
Methode zulassen , erhalten Sie den Build-Ordner, unabhängig davon, ob Sie debuggen oder freigeben. Ich hoffe diese Hilfe! Wenn Sie die Validierungen vergessen, sieht das folgendermaßen aus:quelle
Ich habe auch danach gesucht. Ich habe ein Projekt, in dem HWC ausgeführt wird, und ich möchte die Website aus dem App-Baum heraushalten, aber ich möchte sie nicht im Debug- (oder Release-) Verzeichnis behalten. FWIW, die akzeptierte Lösung (und auch diese) identifiziert nur das Verzeichnis, in dem die ausführbare Datei ausgeführt wird.
Um dieses Verzeichnis zu finden, habe ich verwendet
quelle
Basierend auf der Antwort von Gucu112 , aber für .NET Core Console / Window-Anwendungen sollte es sein:
Ich verwende dies in einem xUnit-Projekt für eine .NET Core Window-Anwendung.
quelle
Ein anderer Weg, dies zu tun
Wenn Sie den Pfad zum Ordner bin erhalten möchten
Vielleicht gibt es einen besseren Weg =)
quelle
Noch eine unvollkommene Lösung (aber vielleicht ein bisschen näher an der Perfektion als einige der anderen):
Diese Version wird die Rückkehr aktuelle Projekte Ordner auch wenn das aktuelle Projekt nicht das ist
Startup Project
für die Lösung.Der erste Fehler dabei ist, dass ich alle Fehlerprüfungen übersprungen habe. Dies kann leicht behoben werden, sollte jedoch nur dann ein Problem darstellen, wenn Sie Ihr Projekt im Stammverzeichnis des Laufwerks speichern oder eine Junction in Ihrem Pfad verwenden (und diese Junction ein Nachkomme des Lösungsordners ist), sodass dieses Szenario unwahrscheinlich ist . Ich bin mir nicht ganz sicher, ob Visual Studio eines dieser Setups überhaupt verarbeiten kann.
Ein weiteres (wahrscheinlicheres) Problem, auf das Sie möglicherweise stoßen, besteht darin, dass der Projektname mit dem Ordnernamen des Projekts übereinstimmen muss , damit es gefunden wird.
Ein weiteres Problem besteht möglicherweise darin, dass sich das Projekt im Lösungsordner befindet. Dies ist normalerweise kein Problem. Wenn Sie jedoch die
Add Existing Project to Solution
Option zum Hinzufügen des Projekts zur Lösung verwendet haben, ist Ihre Lösung möglicherweise nicht so organisiert.Wenn Ihre Anwendung das Arbeitsverzeichnis ändert, sollten Sie diesen Wert vorher speichern, da dieser Wert relativ zum aktuellen Arbeitsverzeichnis bestimmt wird.
Dies alles bedeutet natürlich auch, dass Sie die Standardwerte für die Optionen
Build
->Output path
oderDebug
-> Ihrer ProjekteWorking directory
im Dialogfeld Projekteigenschaften nicht ändern dürfen .quelle
Versuchen Sie dies, es ist einfach
quelle
Diese Lösung funktioniert gut für mich, auf Develop- und auch auf TEST- und PROD-Servern mit ASP.NET MVC5 über C # :
Wenn Sie ein Projektverzeichnis in der Projektkonfigurationsdatei benötigen, verwenden Sie:
quelle
Nachdem ich endlich meine erste Antwort bezüglich der Verwendung öffentlicher Zeichenfolgen poliert hatte, um eine Antwort abzuleiten, wurde mir klar, dass Sie wahrscheinlich einen Wert aus der Registrierung lesen konnten, um das gewünschte Ergebnis zu erzielen. Wie sich herausstellte, war diese Route noch kürzer:
Zunächst müssen Sie den Microsoft.Win32-Namespace angeben, damit Sie mit der Registrierung arbeiten können:
Hier ist der Hauptcode:
Ein Hinweis zu dieser Antwort:
Ich verwende Visual Studio 2008 Professional Edition. Wenn Sie eine andere Version verwenden (z. B. 2003, 2005, 2010; usw.), müssen Sie möglicherweise den 'version'-Teil der SubKey-Zeichenfolge (z. B. 8.0, 7.0; usw.) nicht ändern.
Wenn Sie eine meiner Antworten verwenden und es nicht zu viel verlangt, dann würde ich gerne wissen, welche meiner Methoden Sie verwendet haben und warum. Viel Glück.
quelle
Ich hatte eine ähnliche Situation und nach fruchtlosen Googles habe ich eine öffentliche Zeichenfolge deklariert, die einen Zeichenfolgenwert des Debug- / Release-Pfads ändert, um den Projektpfad abzurufen. Ein Vorteil dieser Methode besteht darin, dass es nicht darauf ankommt, ob Sie von einem Debug-Verzeichnis oder einem Release-Verzeichnis aus arbeiten, da sie das Verzeichnis des korrekten Projekts verwendet:
Sie können es dann jederzeit mit nur einer Leitung aufrufen:
Dies sollte in den meisten Fällen funktionieren .
quelle
Verwenden Sie dies, um das Projektverzeichnis abzurufen (für mich gearbeitet):
quelle
quelle
Ich habe folgende Lösung verwendet, um die Arbeit zu erledigen:
quelle
Versuchen:
Diese Lösung unterscheidet sich von den anderen und berücksichtigt auch mögliche x86- oder x64-Builds.
quelle
Die beste Lösung
Andere Lösung
Testen Sie es, AppDomain.CurrentDomain.BaseDirectory hat für mich an einem früheren Projekt gearbeitet, jetzt erhalte ich einen Debug-Ordner .... die ausgewählte GUTE Antwort funktioniert einfach NICHT!.
quelle
Wenn Sie wirklich sicherstellen möchten, dass Sie das Quellprojektverzeichnis erhalten, unabhängig davon, auf welchen Bin-Ausgabepfad festgelegt ist:
Fügen Sie eine Befehlszeile für Ereignisse vor dem Erstellen hinzu (Visual Studio: Projekteigenschaften -> Ereignisse erstellen):
echo $(MSBuildProjectDirectory) > $(MSBuildProjectDirectory)\Resources\ProjectDirectory.txt
Fügen Sie die
ProjectDirectory.txt
Datei zur Datei Resources.resx des Projekts hinzu (Wenn sie noch nicht vorhanden ist, klicken Sie mit der rechten Maustaste auf Projekt -> Neues Element hinzufügen -> Ressourcendatei.)Resources.ProjectDirectory
.quelle
Dies funktioniert bei VS2017 mit SDK Core MSBuild-Konfigurationen.
Sie müssen NuGet in den EnvDTE / EnvDTE80-Paketen verwenden.
Verwenden Sie weder COM noch Interop. alles .... Müll !!
quelle
Directory.GetParent (Directory.GetCurrentDirectory ()). Parent.Parent.Parent.Parent.FullName
Gibt Ihnen das Projektverzeichnis.
quelle