Bestimmen Sie den aktuellen Pfad mit DNX-Projekten

7

Ziel

Für Integrationstests möchte ich eine benutzerdefinierte XML-Konfiguration laden. Diese XML befindet sich in einem Ordner in meinem Integrationstestprojekt.

Für weitere Ziele möchte ich die neuen DNX-Projekte verwenden. Ich weiß, dass sie immer noch in der Vorschau sind.

Lokale Tests funktionieren einwandfrei. Das Problem ist jetzt, dass ich keine relativen Pfade verwenden kann, da die aktuellen Verzeichnisinformationen wegen des Testsystems nicht der Projektordner meines Projekts sind. Das gleiche Problem mit AppVeyor.

Der Build-Agent wird in einem anderen Ordner gestartet und die relativen Pfadinformationen sind falsch und schlagen fehl. Keine Überraschung hier.

Ich habe versucht, dies mit diesem Snippet zu lösen:

%Vor%

Problem

Das Problem ist hier: Wegen der neuen DNX-Runtime gibt dies nicht den Speicherort meines Projekts und / oder Assembly zurück, es gibt den Runtime-Ordner zurück:

%Vor%

Gleiches Verhalten, wenn ich nach CodeBase oder Executing / CallingAssembly frage.

Mit "alten" einfachen C # -Projekten und MsTest bekomme ich den Pfad wie erwartet.

Environment.CurrentDirectory funktioniert nicht in AppVeyor, da der Prozess nicht im Projektordner gestartet wird und dieser Befehl einen anderen Pfad (den Pfad des gestarteten Projekts) zurückgibt.

Frage

Was ist der richtige Weg, um hier mit relativen Pfaden zu arbeiten?

Umgebung

  • VS 2015 Update 1
  • DNX-Projektvorlagen
  • xUnit-Konfiguration
  • AppVeyor Build-System
Ben 19.01.2016, 14:51
quelle

1 Antwort

18

In DNX-Projekten müssen Sie die Abhängigkeit Microsoft.Extensions.PlatformAbstractions hinzufügen und verwenden PlatformServices.Default.Application.ApplicationBasePath

Oder noch einfacher ohne zusätzliche Abhängigkeit: Verwende System.AppContext.BaseDirectory

Vielleicht würde das Reflektionsmaterial wegen zukünftiger nativer Kompilierung nicht funktionieren. Ich denke System.AppContext.BaseDirectory ist die einfachste Lösung. PlatformServices.Default.Application erbt die Schnittstelle IApplicationEnvironment , die standardmäßig in neue ASP.NET Core-Anwendungen eingefügt wird.

    
Ben 20.01.2016, 11:07
quelle

Tags und Links