C# 如何在本地引用xml文件?

C# 如何在本地引用xml文件?,c#,asp.net,C#,Asp.net,我有一个包含ASP.NET项目和类库项目的解决方案,其中ASP.NET项目依赖类库作为数据访问层 在我的类库项目中,我有SiteSetting.xml和请求xml文件的c#代码,如下所示 C#代码: 当我启动我的asp.net应用程序并查看调用上述c代码的页面时,我收到一个错误消息:“找不到文件‘c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\SiteSetting.xml’。” C:\Program Files\Microsof

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

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

C#代码:

当我启动我的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:\Projects\StackOverflow
c:\Projects\StackOverflow\StackOverflow.Data对于ASP.NET站点,您有实用工具
Server.MapPath(“~/App\u Data/Settings.xml”)


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

对于ASP.NET站点,您有实用工具
Server.MapPath(“~/App\u Data/Settings.xml”)


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

任何“本地”都应通过MapPath寻址。如果它位于应用程序根目录中,请使用:

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

任何“本地”内容都应通过MapPath解决。如果它位于应用程序根目录中,请使用:

string filepath = Server.Mappath("~/SiteSetting.xml");
使用MapPath?:

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

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

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

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

此外,听起来您可能想考虑创建自己的ConfigurationSection。看

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

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

然后,您可能需要使用System.Web.Hosting.HostingEnvironment.MapPath()映射此路径。您遇到的问题是,您的设置在类库中。但是,这只是该库的建筑环境

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

此外,听起来您可能想考虑创建自己的ConfigurationSection。看

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

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

然后,您可能需要使用System.Web.Hosting.HostingEnvironment.MapPath()映射此路径。

我必须承认,我从其他地方复制了它:p但答案中包含完整名称空间确实很有用。实际上,
HttpContext.Current.Server
不是名称空间,而是由3个静态类组成的序列。你不需要输入前2个,因为你的页面对象提供了一个
Server
属性。我知道你不需要前两个,但我从来没有检查过它是一个名称空间还是一个类序列。我不得不承认我从其他地方复制了它:p但答案中包含完整的名称空间确实很有用。实际上,
HttpContext.Current.Server
不是一个名称空间,而是一个由3个静态类组成的序列。你不需要输入前2个,因为你的页面对象提供了一个
Server
属性。我知道你不需要前两个,但我从未检查过它是一个名称空间还是一个类序列。我有一种感觉,这将是我将得到的解决方案。它还补充说,在维护方面存在着小而额外的复杂性,我觉得这将是我能得到的解决方案。它增加了维护的小而额外的复杂性