2017-04-22 150 views
2

我正在使用visual studio爲windows開發桌面應用程序。我正在用C#編寫使用WPF的UI。Visual Studio c#相對路徑,程序即使在找到正確的路徑時也搜索兩條路徑

我用Google搜索了一個答案,但還沒有找到任何答案。很可能是因爲我不完全知道實際問題是什麼。

我已經運行到哪裏我試圖訪問一個文件在文件夾資源 問題(C:\用戶\ MYNAME \項目\ MyProject的\項目名\資源\ XML \的test.xml) 使用此代碼:

XElement xmlFromFile = XElement.Load(@"..\..\resources\xml\test.xml"); 

的問題是,該文件被發現,XML可以通過xmlFromFile變量進行訪問,但該程序還可以搜索,如果我嘗試這個

D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\resources\xml\test.xml 

相同的情況也發生:

static string codePath = Directory.GetParent(Directory.GetParent(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)).FullName).FullName; 
FileLog log = new FileLog(codePath + "\\logs\\log.txt"); 
log.Log("Test") 

其中,codePath指的是類文件所在的目錄,FileLog是一個使用File.AppendAllText(path,string)簡單地記錄到文件的類。 這段代碼給出了同樣的錯誤,但路徑是相反:

C:\Users\MyName\AppData\Local\Microsoft\VisualStudio\15.0_919b9cb1\Designer\ShadowCache\logs\log.txt 

但是這一次也寫輸入的字符串(測試),以在正確的位置正確的文件。那麼,爲什麼這是一個問題,如果它的工作?雖然它在這裏可以正常工作,但問題在於WPF並沒有像往常一樣給我預覽UI,可能還有其他問題,但沒有我知道的。預覽只是說明:無法創建「主頁」的實例。 Where Home是WPF用戶控件。

所以我的問題是:如何修復代碼,使程序不在兩個地方搜索(如果確實是這樣)?

回答

0

這裏發生了什麼我相信並不是程序沒有在多個地方搜索一個文件,而是從不同的地方加載相關文件搜索的程序集。 .NET有一個迷人的,很少理解的機制來查找一個程序集並加載它在本文檔中描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

所以我認爲正在發生的是你正在不同的上下文中檢查這種行爲(即使用調試器,在設計者等中),並且正在使用的程序集從不同的地方加載,因此以不同方式評估相對文件路徑。

所以,如果我是對的,那麼你正在追逐一個影子。這是您的開發計算機上的行爲人爲現象,一旦應用程序部署完畢,這些行爲就會消失,並且只有一個地方可以找到發佈程序集。

+0

謝謝你的回答。我很高興聽到它不應該有任何其他副作用。你知道有什麼方法可以讓WPF顯示預覽,即使出現錯誤嗎?這並不重要,我可以運行應用程序,但它會很方便。 –