2009-08-13 206 views
2

我正在爲我的web應用程序的文件上傳功能編寫單元測試。我嘲笑一個測試文件,並將其保存在我的測試項目駐留的目錄的「Test files」子目錄中。Visual Studio項目目錄

因爲我不想硬編碼文件路徑。我如何通過代碼知道我的項目目錄?我用@「.. \ Test files \ test1.xml」,但它不起作用。

在此先感謝!

+0

更壞的情況下,您可以將您的路徑添加到配置文件。否則...是的...我們需要知道您使用的語言? – 2009-08-13 03:05:21

+0

謝謝安德烈!它在C#中。我可以將這個項目上傳到構建服務器,這就是爲什麼我不想使用硬編碼文件路徑。 – Roy 2009-08-13 03:33:01

回答

4

請記住,您的單元測試項目將從它自己的bin目錄運行而不是從項目目錄運行。你可以得到的路徑,使用bin目錄:

Assembly.GetExecutingAssembly().Location 

然而,最容易做的事情是設置你的測試文件和文件夾複製到輸出目錄。只需在解決方案資源管理器中單擊您的文件,按F4,然後將「複製到輸出目錄」更改爲「始終複製」或「如果更新則複製」。文件夾結構將自動被複制。那麼你的相對路徑語句將正確工作。

+0

我更喜歡你的第一個建議。我可以從哪裏得到這個程序集所在的位置。但是當涉及到單元測試時。該二進制生成在這樣的路徑:「%Visual Studio項目目錄%\ [項目名稱] \ TestResults \ [計算機名稱] [日期時間] \ Out \ *。dll」 – Roy 2009-08-13 06:08:39

+0

我認爲沒有辦法,但得到從該字符串解析項目目錄。 – Roy 2009-08-13 06:10:07

0

我相信HttpContext.Current.Request.PhysicalApplicationPath將爲您提供應用程序根目錄的物理目錄。

我會將子目錄的名稱存儲在web.config文件中,然後使用System.IO.Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath)構建子目錄的完整路徑。

0

只是另一種方式:

int ix = Application.StartupPath.LastIndexOf(Application.ProductName); 
string s = Application.StartupPath.Remove(ix + Application.ProductName.Length + 1); 

編輯:我張貼後,我看到的問題是對於Web應用程序,而我的解決方案是爲Windows窗體。