2009-12-01 91 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

相關問題