2015-08-05 3 views
5

Ich habe zwei Projekte in meiner Lösung und Projekt A hat eine Referenz B. Projekt A ruft eine Funktion in Projekt B zu projizieren, die ein Dokument laden sollen, die in Projekt B:Legen Sie eine Datei von einem anderen Projekt

return XDocument.Load(@"Mock\myDoc.html"); 

Das Problem ist, dass XDocument.Load den Pfad von Projekt A verwendet (wo gibt es keine Mock\myDoc.html).

Ich habe versucht,

string curDir = Directory.GetCurrentDirectory(); 
var path = String.Format("file:///{0}/Mock/myDoc.html", curDir); 

verwenden, aber das gibt mir auch einen Weg zu ProjectA\Mock\myDoc.html wenn stattdessen sollte es ProjectB\Mock\myDoc.html sein. Was vermisse ich?

EDIT: "Copy to Output" für die Datei "myDoc.html" auf "Copy immer" und die Datei im Ausgabeordner der Projekt B zur Verfügung.

+2

in Projekt B, wählen Sie 'Mock \ myDoc.html' => zum Ausgabeverzeichnis kopieren http://stackoverflow.com/questions/4596508/vs2010-how-to-include-files-in-project- to-copy-them-to-build-output-directory-a –

+0

Es ist bereits auf CopyToOutput-Verzeichnis festgelegt. Projekt B hat ein anderes Ausgabeverzeichnis als Projekt A. – peter

+1

Alle Dateioperationen beziehen sich auf das aktuelle (Arbeits) -Verzeichnis des Prozesses. Dies hat keine Beziehung zu den Ordnern, in denen sich Ihr Projekt befindet. Um relative Pfade zu verwenden, müssen Sie das aktuelle Verzeichnis festlegen. Dass es sich derzeit um den Ausgabeort eines Projekts handelt, sind lediglich Standardwerte vom Startvorgang. – Richard

Antwort

7

Es gibt nur ein aktuelles funktionierendes Verzeichnis für den gesamten Code zur Laufzeit. Sie müssen zum Lösungsverzeichnis und dann zurück zum anderen Projekt navigieren.

string solutiondir = Directory.GetParent(
    Directory.GetCurrentDirectory()).Parent.FullName; 
// may need to go one directory higher for solution directory 
return XDocument.Load(solutiondir + "\\" + ProjectBName + "\\Mock\\myDoc.html"); 
-1

Wenn sich Ihre Dateien in Projekt B befinden, sollten Sie die Funktionen kodieren, die auf sie in B zugreifen. Jetzt muss das Projekt A nur einfache Aufrufe permieren.

+2

Ich glaube, das hat er getan. – weirdev

+0

Mein Fehler, nach der Kompilierung wird das Projekt B zu einer DLL und wird in das Verzeichnis von Projekt A kopiert. So ist die tatsächliche Lösung: Legen Sie keine Ressourcendateien in den Kompilierungsordner Ihrer DLL. – Paradise228

-1

aktualisieren vorübergehend die Anwendung aktuellen Verzeichnis:

string saveDir = Directory.GetCurrentDirectory(); 
Directory.SetCurrentDirectory("the_projectB_defaultDirectory"); 
ProjectBfunction() ; 
Directory.SetCurrentDirectory(saveDir) ; 

Wenn Ihr Verzeichnis Architektur es erlaubt, können Sie das ProjectB Verzeichnis von ProjectA aktuellen Verzeichnis oder aus dem Exe-Verzeichnis (das heißt Application.StartupPath) ableiten kann.

Verwandte Themen