从C#(Visual Studio)中的非web项目读取xml文件

从C#(Visual Studio)中的非web项目读取xml文件,c#,xml,visual-studio,linq-to-xml,C#,Xml,Visual Studio,Linq To Xml,我正在尝试读取VS解决方案中某个项目中存在的xml文件。这是我的密码 string path = HttpContext.Current.Server.MapPath(@"~\Resources\XmlDocument.xml"); XDocument document = XDocument.Load(path); 如果我的xml文件在web项目中,这就可以正常工作。但实际上,我的xml文件位于同一解决方案下的另一个项目中 我无法使用Server.MapPath搜索web项目。我寻找答案,

我正在尝试读取VS解决方案中某个项目中存在的xml文件。这是我的密码

string path = HttpContext.Current.Server.MapPath(@"~\Resources\XmlDocument.xml");

XDocument document = XDocument.Load(path);
如果我的xml文件在web项目中,这就可以正常工作。但实际上,我的xml文件位于同一解决方案下的另一个项目中

我无法使用
Server.MapPath
搜索web项目。我寻找答案,但没有找到任何对我有效的解决办法

如何访问此xml文件?我正在尝试从同一项目中的帮助器方法访问此文件。

尝试以下操作:

  string path = HostingEnvironment.ApplicationPhysicalPath + (some path);


   public void LoadXML()
    {
        if (System.IO.File.Exists(path))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<int>));
            lock (new object())
            {
                using (TextReader reader = new StreamReader(path))
                {
                    return (List<int>)(serializer.Deserialize(reader));
                }
            }
        }
    }
string path=HostingEnvironment.ApplicationPhysicalPath+(一些路径);
公共void LoadXML()
{
if(System.IO.File.Exists(path))
{
XmlSerializer serializer=新的XmlSerializer(typeof(List));
锁定(新对象())
{
使用(TextReader=新的StreamReader(路径))
{
返回(列表)(序列化程序.反序列化(读取器));
}
}
}
}

这对我来说很有用。

一旦你得到了你的当前目录,为什么不浏览一些父目录,然后找到你的文件呢

DirectoryInfo info = new DirectoryInfo(Environment.CurrentDirectory);
DirectoryInfo parent = info.Parent.Parent;
string file = Path.Combine(parent.FullName, @"your\path");
这里我使用
Environment.CurrentDirectory
来获取程序现在的位置,但是您可以根据需要堆叠任意多个
Parent
元素。然后,您可以组合路径以到达另一个项目中的文件

编辑:


应用程序运行完所有环境变量后,
Server.MapPath
将为您提供它执行的位置(即您现在获得的路径)。有鉴于此,创建一个文件夹并通过其完整路径引用它可能更容易
(C:\Data\myfile.xml)

OP的问题是xml文件没有被复制到基础项目中。Kristina,我尝试了您的解决方案,但HostingEnvironment.ApplicationPhysicalPath仍然返回web project的路径。添加一些有关xml文件属性的详细信息,我有“嵌入式资源”的构建操作,对于复制到输出目录,我尝试了“始终复制”和“不复制”是的,但如果您知道项目的位置,并且路径没有动态更改,您可以更改路径。嗨,克里斯蒂娜,这条建议奏效了。我在代码中手动更改了路径,您好,我尝试了这个,因此Environment.CurrentDirectory返回C:\Program Files(x86)\IIS Express,而不是项目的路径。不知道我错过了什么here@Sri请参阅我的编辑。不确定你还有什么其他选择