2009-12-01 93 views
3

我想在我的项目文件夹中的单元测试中获取文件的完整路径。 我尝试使用什么是Java的System.getProperty(“user.dir”)的.NET等价物?

Directory.GetCurrentDirectory(); 

但它返回我的测试是在运行目录下。我想这个项目(或解决方案)的目录,而不必硬编码在那里。然后我可以追加文件名的最后部分。同样的事情也给

System.getProperty("user.dir") 

在Java

回答

0
string filePath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string folderPath = System.IO.Path.GetDirectoryName(filePath); 

而且,这是最好的标记与双赢的形式,WPF或ASP净你的C#的帖子,这样我们可以告诉你什么工作平台。

+0

这会得到当前的工作目录,即测试运行的地方,而不是项目路径 – 2009-12-01 17:27:44

1
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 

将为您带来运行单元测试DLL本身的路径。

要访问项目子文件夹中的文件,最简单的方法是将相关文件标记为Build Action = ContentCopy to Output Directory = Copy if newer。如果你这样做了,那么无论何时构建项目,它们都将被复制到正在运行的程序集文件夹下的相关文件夹中。然后可以计算相对于正在运行的组件的物理路径。

例如:

  • 你必须位于<project root>\TestData\Data1.txt一个文本文件。
  • 当您在调试模式下构建项目时,它将被复制到<project root>\bin\Debug\TestData\Data1.txt
  • 您的代码中的物理路径将为Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestData\Data1.txt")
+1

,这似乎是一个引用文件的很多开销。这是大多数人在C#中使用测试数据文件的方式吗?我有几十个文件,一些很大,并且似乎有点愚蠢,必须复制它们并让它们在输出目录中挂起 – 2009-12-01 17:29:54

+0

我不知道Java中的getProperty(“user.dir”)是什么所以我不能评论。在.NET中,当您的程序集正在执行时,直接推断源代码的位置实际上是不可能的。机器上可能没有*任何源代码,那么你怎么可能得到它?获取所需文件的唯一方法是将它们从源代码复制到正在运行的程序集位置。因此我的答案。 – 2009-12-01 19:21:18

相关问题