.NET中与Java的System.getProperty("user.dir")等效的是什么?

3
我正在尝试获取单元测试中项目文件夹内文件的完整路径。我尝试使用:

Directory.GetCurrentDirectory();

但是那会返回我的测试运行目录。我想要项目(或解决方案)的目录,而不必在其中硬编码。然后我可以附加文件名的最后一部分。类似于

System.getProperty("user.dir")

在Java中
3个回答

2
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#中使用测试数据文件的方式吗?我有几十个文件,一些很大,把它们复制过去并让它们挂在输出目录中似乎有点傻。 - Ovi Tisler
1
我不知道Java中的getProperty("user.dir")是什么意思,所以无法发表评论。在.NET中,当您的程序集正在执行时,直接推断源代码位置是物理上不可能的。机器上可能没有任何源代码,那么你怎么能得到它呢?获取所需文件的唯一方法是将它们从源代码复制到运行程序集的位置。这就是我的答案。 - Christian Hayter

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

此外,最好使用win-forms、WPF或asp-net标记您的c#帖子,以便我们可以知道您正在使用哪个平台。

这会获取当前工作目录,即测试运行的位置,而不是项目路径。 - Ovi Tisler

0
string Path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接