获取位于另一个项目但相同解决方案中的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
?
您必须从ABC.Data和ABC.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;
}
}