簡體   English   中英

獲取位於另一個項目但相同解決方案中的XML文件的相對路徑

[英]Get relative path of XML File located in another project but Same Solution

我找到了許多有關查找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呢?

您將必須從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或publish(web project)文件夾上創建,您只需要編寫此代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM