获取位于另一个项目但相同解决方案中的XML文件的相对路径

本文关键字:XML 文件 路径 相对 解决方案 另一个 项目 获取 | 更新日期: 2023-09-27 18:24:17

我发现了许多关于查找XML文件的文章和问题,但它们都是针对同一项目的。

假设我的项目结构如下所示:

ABC       <------ Solution
|--ABC.Data         <------ Project
|  |--XMLFiles      <-------Folder
|     |--AA.xml
|
|--ABC.Client      <------ Project
|  |--ViewModels   <-------Folder
|     |-MainViewModel.cs

现在我想使用XDocument.Load(....path.....)在MainViewModel.cs中加载AA.xml文件。

那么,如何获取path

获取位于另一个项目但相同解决方案中的XML文件的相对路径

您必须从ABC.DataABC.Client的父级上的执行程序集文件夹移回。例如,执行程序集位于ABC中。Client->ViewModels->Bin->Debug

XDocument.Load("../../../../../ABC.Data/ABC.Data/AA.xml");

但实际上,我认为它没有任何用处,因为当您部署应用程序时,项目层次结构不会在那里。如果您有需要由多个程序集访问的XML文件,只需将该XML文件放在Execution文件夹中即可。所有组件都可以访问它。

您还可以制作一个单独的程序集,通过将该程序集的引用添加到所有其他项目,来公开AA.xml文件数据,以便进行读写操作。我更喜欢这种方法。

您需要几个设置才能使您的场景在中工作

首先右键单击xml文件(或您想要访问的任何文件),并将"复制到输出目录"设置为"始终复制",当您构建或发布该文件的文件夹结构(在您的情况下为AA.xml)时,将在bin或发布(web项目)文件夹上创建,您只需编写以下代码

var path = HostingEnvironment.ApplicationPhysicalPath+"''bin";//path to you bin

如果您使用的是winforms

var path = Application.StartupPath;//path to you bin 

最后

var fullpath=path+"''XMLFiles''AA.xml";
XDocument.Load(fullpath) ;

然而,更好的方法是创建一个Helper类,它将为您的应用程序(如)获取xml内容

public static class XMLHelpers
{
 public static XMLDocument GetXML(string KEY)
 {
    string file="";
    switch(KEY)
    {
      case "AA": file=Path.Combine(file,"AA.txt");
      break;
    }
     var xmldoc=new XMLDocument();
     xmldoc.Load(file);
     return xmldoc;
 }
}