2012-03-07 29 views
5

ASP.NET新手我不確定是否是我的問題的最佳解決方案。我有一行代碼,如:ASP.NET應用程序代碼背後的相對路徑

xDoc.Load("Templates/template1.cfg"); 

xDoc是一個XmlDocument。在我的項目中,頂層有一個名爲Templates的目錄。當我以調試模式運行項目時,我得到一個DirectoryNotFoundException,顯然它正在尋找C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Templates中的模板目錄。

如何正確指向該目錄而不對其進行硬編碼?

+6

你看過'Server.MapPath'嗎? – asawyer 2012-03-07 14:18:42

回答

15

Server.MapPath - 返回相對路徑的路徑; ~確保相對路徑與應用程序根目錄相關

xDoc.Load(Server.MapPath("~/Templates/template.cfg")); 
+2

謝謝。你和@asawyer是現貨。問題解決了。 – kmarks2 2012-03-07 15:25:04

+0

這麼簡單,但仍然正是我需要的。這非常有幫助。謝謝 – 2016-06-13 07:49:24

3
xDoc.Load("~/Templates/template.cfg"); 

可能工作?

1

在您的路徑中使用波浪號「〜」。

xDoc.Load("~/Templates/template1.cfg"); 

代字號表示應用程序的基本目錄。

+0

不幸的是,這是我第一次嘗試,同樣的問題。這很奇怪,因爲〜/在aspx頁面中工作正常。 – kmarks2 2012-03-07 14:19:54

+0

是的 - xDoc不會知道它正在ASP.NET應用程序的上下文中使用。檢查Server.MapPath。 – n8wrl 2012-03-07 14:21:13

7

我可能會使用

xDoc.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Templates/Template.cfg")); 

這使得你的XML獨立ASP.NET的加載代碼。如果您要在Windows窗體應用程序中重新使用它,則會爲包含Windows窗體exectuable的目錄提供相對路徑。

3

嘗試:

xDoc.Load(Server.MapPath("~/Templates/template1.cfg")); 
相關問題