2016-03-22 2 views
1

Ich habe eine Konsolenanwendung. Und in dieser Anwendung habe ich ein Klassenbibliotheksprojekt erstellt, das ich im Hauptprojekt referenziere. In dieser Klassenbibliothek habe ich eine Datei, die ich zu bekommen versuche. der Code dafür:Warum ist das AppDomain.CurrentDomain.BaseDirectory-Targeting für das Bin-Catenlog in der Konsolenanwendung?

public static string GetPath(string fileName) 
{ 
    char separator = Path.DirectorySeparatorChar; 
    string startupPath = AppDomain.CurrentDomain.BaseDirectory; 
    string[] pathItems = startupPath.Split(separator); 
    string projectPath = string.Join(separator.ToString(), 
     pathItems.Take(pathItems.Length - 1)) + ".Handler"; 
    string path = Path.Combine(projectPath, "WebRequestHandlers\\Files" + separator + fileName); 

    return path; 
} 

Ich habe dies in .net Web-Projekt verwendet, vor und es hat funktioniert, aber aus irgendeinem Grund, dies ist mein AppDomain.CurrentDomain.BaseDirectory:

C: \ projects \ OverWatchServerCall \ OverWatchServerCall \ bin \ Debug \

es sein sollte:

C: \ projects \ OverWatchSe rverCall \ OverWatchServerCall \

Die Datei wird im Classlibrary-Projekt ist und wie ich schon sagte, bevor diese in .net Web-api Projekte gut funktioniert

Warum ist das passiert?

EDIT:

Directory.GetCurrentDirectory() 

Gibt den gleichen Weg

Antwort

1

Die AppDomain.CurrentDomain.BaseDirectory wird nicht durch die Montage, sondern die Hosting-Umgebung definiert (das heißt die Anwendung oder Service).

Sobald Sie eine Konsolenanwendung erstellt haben, gehen Ihre ausführbare Datei und Ihre Satellitenassemblys zu dem in Ihrer Datei *.csproj definierten Ausgabepfad. Der Standardwert ist (zum Beispiel: bin\Debug).

Da die gesamte ausführbare Datei im Ausgabepfad ausgeführt wird, ist dies das Basisverzeichnis.

Warum in ASP.NET WebAPI-Projekte in Ihrem Fall gut funktioniert? Wahrscheinlich, weil Sie ASP.NET-WebAPI in IIS hosten. Wenn Sie es mit OWIN/Katana tun, das in einem Windows-Dienst gehostet wird, würden Sie das gleiche Problem haben.

+0

Vielen Dank für die Erläuterung. Ich war auf der Suche nach einer Lösung, aber in meiner Frustration habe ich vergessen, es zu erwähnen. aber ich habe Teilzeichenfolge verwendet, um/bin/debug zu entfernen und mein Code hat funktioniert – ThunD3eR

+0

@ Ra3IDEn Kein Problem! Gern geschehen, und ich bin froh, dass Sie das Problem lösen;) –

+0

@ Ra3IDeN Es gibt keine Lösung hier, da das 'BaseDirectory' nur bereitgestellt werden kann, wenn die 'AppDomain' erstellt wird :( –