【问题标题】:Read an xml file from non-web project in C# (Visual Studio)从 C# (Visual Studio) 中的非 Web 项目中读取 xml 文件
【发布时间】:2018-07-17 16:53:51
【问题描述】:

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

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

XDocument document = XDocument.Load(path);

如果我的 xml 文件在 web 项目中,这可以正常工作。但实际上我的 xml 文件在同一个解决方案下的不同项目中。

我不能使用Server.MapPath 来搜索网络项目。我搜索了答案,但没有找到任何适合我的解决方案。

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

【问题讨论】:

    标签: c# xml visual-studio linq-to-xml


    【解决方案1】:

    试试这个:

      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));
                    }
                }
            }
        }
    

    这对我有用。

    【讨论】:

    • OP 的问题是 XML 文件没有被复制到基础项目中。
    • Kristina,我尝试了您的解决方案,但 HostingEnvironment.ApplicationPhysicalPath 仍然返回 Web 项目的路径。
    • 添加更多信息,对于 xml 文件属性,我已构建操作“嵌入式资源”,对于复制到输出目录,我已尝试使用“始终复制”和“请勿复制”跨度>
    • 是的,但是如果您知道项目的位置,并且路径没有动态变化,则可以更改路径。
    • 嗨,克里斯蒂娜,这个建议奏效了。我手动更改了代码中的路径,
    【解决方案2】:

    获得当前目录后,为什么不向上导航多个父目录,然后找到您的文件?

    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)

    【讨论】:

    • 嗨,我试过了,所以 Environment.CurrentDirectory 返回 C:\Program Files (x86)\IIS Express 而不是项目路径。不知道我在这里缺少什么
    • @Sri 看到我的编辑。不知道您还有什么其他选择
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多