如何在本地引用xml文件?

时间:2009-10-01 14:43:27

标签: c# asp.net

我有一个ASP.NET项目和一个类库项目的解决方案,其中ASP.NET项目依赖于类库作为数据访问层。

在我的类库项目中,我有SiteSetting.xml和c#代码请求xml文件,如下所示。

C#代码:


DataSet ds = new DataSet();
ds.ReadXml("SiteSetting.xml");

当我启动我的asp.net应用程序并查看调用上面的c#代码的页面时,我收到一条错误消息“无法找到文件”C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ SiteSetting .XML”。“

C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \显然不是我的c#代码所在的位置。我的源代码在c:\ Projects ..但是我的ASP.NET和类库项目的编译二进制文件在哪里被执行?更好的问题是,如何在ds.ReadXml()的上下文中使用相对路径正确引用SiteSetting.xml?

我想使用相对路径,以便在找到SiteSetting.xml时,我的二进制文件执行位置不会出现问题

更新 谢谢你输入的人。 Server.MapPath()很接近,但没有雪茄。 Server.MapPath在我的ASP.NET项目中返回一个相对路径,而不是我的c#,这是我的SiteSettings.xml所在的位置。

例如,我有一个名为StackOverflow的项目,它有一个名为“StackOverflow.Data”的C#项目和一个名为“www”的ASP.NET Web项目,那么我将拥有以下文件夹。

C:\项目\ StackOverflow的 c:\ Projects \ StackOverflow \ StackOverFlow.Data< - 类库项目作为我的数据访问层 c:\ Projects \ StackOverflow \ www< - 调用StackOverflow.Data类和方法的ASP.NET项目

Server.MapPath(“〜/ SiteSettings.xml”)返回c:\ Projects \ StackOverflow \ www \ SiteSetting.xml。我需要一种方法来获取类似c:\ Projects \ StackOverflow \ StackOverflow.Data \ SiteSetting.xml

的路径

4 个答案:

答案 0 :(得分:9)

使用MapPath? :

var filePath = HttpContext.Current.Server.MapPath("~/App_Data/SiteSetting.xml");

答案 1 :(得分:3)

任何'本地'都应该通过MapPath解决。如果它位于您的Application根目录中,请使用:

string filepath = Server.Mappath("~/SiteSetting.xml");

答案 2 :(得分:3)

您遇到的问题是您的设置位于类库中。但是,这只是该库的构建环境。

您需要考虑运行时环境,即Web应用程序,并在该环境中引用该文件。

此外,听起来您可能想要创建自己的ConfigurationSection。见How to: Create Custom Configuration Sections Using ConfigurationSection

如果配置部分不合适,我会在web.config中添加一个应用程序设置,其中包含settings.xml文件所在的路径,然后在类库中读取该设置。

string filePath = ConfigurationManager.AppSettings["settingName"];

然后,您可能需要使用System.Web.Hosting.HostingEnvironment.MapPath()

映射此路径

答案 3 :(得分:1)

对于ASP.NET站点,您有实用程序Server.MapPath("~/App_Data/Settings.xml")

这将根据文件在应用程序中的相对位置返回文件的本地文件路径。

相关问题