我发现了许多关于查找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
?
答案 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;
}
}