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

7

作为一名新手,我对ASP.NET的最佳解决方案感到不确定。我有一行代码如下:

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

xDoc是一个XmlDocument。在我的项目中,顶级目录下有一个名为Templates的目录。当我以调试模式运行项目时,出现了一个DirectoryNotFoundException,显然它正在寻找位于C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Templates的Templates目录。

如何正确指向该目录而不硬编码?


6
你看过 Server.MapPath 吗? - asawyer
5个回答

19

Server.MapPath - 返回相对路径的物理路径;~ 保证相对路径与应用程序根目录相关联

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

12

我会倾向于使用

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

这将使你的XML加载代码独立于ASP.NET。如果你想在其他地方重用它,比如在Windows窗体应用程序中,这将给出相对于包含Windows窗体可执行文件的目录的路径。


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

可能有效吗?


3

尝试:

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

1
在你的路径中使用波浪符“~”。
xDoc.Load("~/Templates/template1.cfg");

波浪号代表您的应用程序的基本目录。


不幸的是,这正是我尝试过的第一种方法,出现了同样的问题。这很奇怪,因为在aspx页面中~/可以正常工作。 - kmarks2
是的 - xDoc 不会知道它被用在 ASP.NET 应用程序的上下文中。请查看 Server.MapPath。 - n8wrl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接