ASP.NET应用程序代码背后的相对路径

问题描述:

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

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

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

可能工作?

在您的路径中使用波浪号“〜”。

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

我可能会使用

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

这使得你的XML独立ASP.NET的加载代码。如果您要在Windows窗体应用程序中重新使用它,则会为包含Windows窗体exectuable的目录提供相对路径。

尝试:

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