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

时间:2014-09-25 09:47:14

标签: c# xml

我发现了许多关于查找XML文件的文章和问题,但所有文章和问题都是针对Same Project的。

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

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

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

那么,我怎样才能获得path

2 个答案:

答案 0 :(得分:1)

您必须从 ABC.Data ABC.Client 的父级上的执行程序集文件夹中退回。例如,执行程序集位于 ABC.Client-&gt; ViewModels-&gt; Bin-&gt; Debug

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

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

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

答案 1 :(得分:1)

您需要一些设置才能使您的方案正常工作

首先右键单击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) ;

然而,更好的方法是创建一个帮助程序类,它将为您的应用程序获取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;
 }
}