2013-01-09 119 views
3

我想從我的解決方案中讀取文件。我想知道如何使用相對路徑來定位文件。我的解決方案包含3個項目。我想要讀取的文件位於項目A中,但正在讀取的代碼位於項目B中。如果我使用..\file.txt將帶我到項目B而不是項目A。如果我使用Application.StartPath 我得到System.IO相對路徑

C:\\Users\\Linda\\AppData\\Local\\Microsoft\\VisualStudio\\10.0\\Extensions\\tangible\\t4 editor\\2.1.1

,而我需要找到我所開發的代碼C:\Sp_CodeGenerator\...

我一直在使用

Environment.GetFolderPath 

Directory.GetCurrentDirectory(); 
System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(Application.ExecutablePath))'` 
System.AppDomain.CurrentDomain.BaseDirectory.ToString(); 

但這些也試過目錄所有這些都會產生相同的結果,並將我帶入Visual Studio Program文件,而不是創建解決方案的位置d在硬盤上。

還有什麼我應該嘗試?

+5

你所期望的,其中溶液已創建的位置」是什麼硬盤「是否在沒有源代碼的系統上執行? – cdhowie

+0

您是否嘗試過在項目屬性中設置工作目錄? – dtb

+0

也許您應該將文件屬性設置爲「將文件複製到輸出目錄」,然後在與執行的程序集相同的目錄中查找它(類似於'Assembly.GetEntryAssembly()。Location')。 – phoog

回答

4

這聽起來像你正在執行t4模板內的路徑相關的代碼?這實際上會影響答案,因爲處理路徑的所有常規方法都將在Visual Studio和您使用的t4編輯器插件的上下文中進行。

您需要訪問ITextTemplatingEngineHost以正確解析您的路徑。

添加hostspecific導演模板

<#@template language="c#" hostspecific="true" #> 

然後你就可以通過

this.Host.ResolvePath(path); 

//also available (Gets the path and file name of the text template that is being processed.) 
//this.Host.TemplateFile 

訪問它見http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.texttemplating.itexttemplatingenginehost(v=vs.110).aspx

+0

謝謝。這正是我所期待的。 –