【问题标题】:Load a file from another project从另一个项目加载文件
【发布时间】:2015-10-28 07:54:03
【问题描述】:

我的解决方案中有两个项目,项目 A 引用了项目 B。项目 A 调用项目 B 中的一个函数,该函数应加载项目 B 中的文档:

return XDocument.Load(@"Mock\myDoc.html");

问题是 XDocument.Load 正在使用来自项目 A 的路径(其中没有 Mock\myDoc.html)。

我尝试过使用

string curDir = Directory.GetCurrentDirectory();
var path = String.Format("file:///{0}/Mock/myDoc.html", curDir);

但这也给了我一条通往ProjectA\Mock\myDoc.html 的路径,而它应该是ProjectB\Mock\myDoc.html。我错过了什么?

编辑: 文件“myDoc.html”的“复制到输出”设置为“始终复制”,并且该文件在 Project B的输出文件夹中可用>。

【问题讨论】:

  • 在项目B中,选择Mock\myDoc.html => 复制到输出目录stackoverflow.com/questions/4596508/…
  • 已设置为 CopyToOutput 目录。项目 B 的输出目录与项目 A 不同。
  • 所有文件操作都将相对于进程的当前(工作)目录。这与您的项目所在的文件夹无关。要使用相对路径,您需要设置当前目录。它当前是项目的输出位置只是启动过程的默认值。
  • 这绝对是有道理的理查德。如果我理解正确,我将不得不对路径进行硬编码?我想要一个也适用于我的同事的解决方案(例如,根文件夹名称可能不同)。我想我可以稍微操纵一下路径以使其正常工作。

标签: c#


【解决方案1】:

所有代码在运行时只有一个当前工作目录。您必须向上导航到解决方案目录,然后返回到另一个项目。

string solutiondir = Directory.GetParent(
    Directory.GetCurrentDirectory()).Parent.FullName;
// may need to go one directory higher for solution directory
return XDocument.Load(solutiondir + "\\" + ProjectBName + "\\Mock\\myDoc.html");

【讨论】:

  • 这对我不起作用。我的当前目录在Temp,代表解决方案目录,其他项目不在。
【解决方案2】:
string str = Path.GetDirectoryName(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName) + "\\->ProjectName<-";

我认为这个想法可以帮助你。

【讨论】:

    【解决方案3】:

    暂时更新应用当前目录:

    string saveDir = Directory.GetCurrentDirectory();
    Directory.SetCurrentDirectory("the_projectB_defaultDirectory");
    ProjectBfunction() ;
    Directory.SetCurrentDirectory(saveDir) ;
    

    如果您的目录架构允许,您可以从 ProjectA 当前目录或 .exe 目录(即 Application.StartupPath)推导出 projectB 目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2022-11-21
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      相关资源
      最近更新 更多