2012-10-29 77 views
2

我正在嘗試從文件中寫入相對路徑,但是我可以從運行的應用程序文件獲取唯一的相對路徑。根據文件的位置獲取目錄C#

這是由於NCrunch從不同的目錄運行測試導致的問題,所以我的測試失敗了,因爲它無法找到與我的代碼文件相關的文件。

重要的是,這是一個相對路徑,因爲有幾個人在這個項目上工作,所以絕對路徑不起作用。

有什麼辦法可以讓代碼寫入的.cs文件相對路徑?

到現在爲止我一直在使用

private static readonly string MyDocumentsRoot =  Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     public static readonly string ApplicationRoot = MyDocumentsRoot + @"\Visual Studio 2012\Projects\"; 

但真正需要的是多一點相對

+0

如果你喜歡一個答案接受 –

回答

3

的解決方案是有據可查的NCRUNCH文檔中:

Implicit File Dependencies

其他的解決方案,遲早會失敗。 (我與MSTest有類似的問題,它提供了類似的解決方案)。

1

您可以使用此代碼嘗試 - 基於GetExecutingAssembly方法

string path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string directory= Path.GetDirectoryName(path); 

或者

string path = System.Reflection.Assembly.GetAssembly(YourClass).Location; 
+0

謝謝,但GetExecutingAssembly不允許論據,這只是拋出一個錯誤 –

+0

我更新後,GetAssembly採取論證鏈接:http://msdn.microsoft.com/fr-fr/庫/ system.reflection.assembly.getassembly.aspx –

0

您可以使用str=Directory.getdirectory這將給你的應用程序路徑(文件夾,直到發佈或調試(你的應用程序所在的位置),並將其保存在一個字符串中(該方法返回一個字符串)。這樣做後,您可以使用找到str1str.replace(str1,str2)方法並將其替換爲str2。只是不要忘記,\裏面的一個字符串是\\,因爲\是一個轉義字符。如果您需要逃生角色的幫助,請告訴我,以便我也可以幫助您。

0

documentation顯示的路徑是相對於項目文件:

例如,您可以指定下列文件包括:

SpecialConfiguration\ImportantConfigFile.config 
..\CustomBuild\**.* 
..\..\TestResources\Spreadsheets\*.xls 

這將包括一個單獨的文件(ImportantConfigFile。 config),..\CustomBuild目錄,其所有子目錄以及..\..\TestResources\Spreadsheets目錄中的所有.xls文件的全部內容。

所有文件路徑必須相對於磁盤上項目文件的路徑指定。當NCrunch構建一個工作區時,它會自動排列所有相關文件,使它們在其工作空間中的相同路徑與它們在原始位置時的相同路徑存在。

0

我通常會在我的可執行文件所在的位置放置一箇舊式的ini文件。在這裏,我存儲了應用程序所需的文件和文件夾的絕對路徑。這也使我能夠在生產環境中(在cutomer站點上)而不是在我的開發環境中配置這些方式。在NCrunch運行組件的文件夾中只有這個ini文件的副本可以解決問題。

我的ini-file實現從可執行文件所在的文件夾開始搜索所有文件夾,直到找到ini文件。這使我可以使用一個常見的ini文件擁有不同的可執行文件。例如。如果將ini文件放在bin文件夾中,則DebugRelease版本將自動訪問相同的ini文件。