2009-01-05 48 views
2

我有一個visual studio解決方案,它由幾個項目組成,並分成不同的目錄。如何返回visual studio當前打開的soution目錄

在我的C#或vb.net代碼,我要確定基本目錄(或該解決方案是在目錄)。

一個骯髒的解決辦法是調用目錄parent.parent.parent,直到我找到一個文件*的.sln,但我也有,我不希望被返回的其他目錄幾種解決方案。

我只是想知道是否有一個更清潔的方法System.Diagnostics.Debugger或類似的部分可能?

我期待您的回覆,謝謝。

回答

1

由於sln文件不需要在目標機器上部署 - 您爲什麼試圖找到它?
如果你仍然想使用sln-嘗試EnvDTE Namespace

EnvDTE.DTE DTE =(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject( 「VisualStudio.DTE」);
string folder = System.IO.Path.GetDirectoryName(dte.ActiveDocument.FullName);

+0

如果有兩個或更多的實例打開,這可能不起作用。您必須在運行對象表中找到正確的實例。代碼就在這裏。 – Will 2011-01-24 20:40:00

0

即使您在其他目錄中有解決方案,可能這些解決方案不是您原始解決方案中的目錄,是嗎?你認爲在什麼情況下,「直到找到一個.sln文件時遞增」將會失敗(除了從錯誤的目錄運行)?

另一種方法是將解決方案目錄作爲命令行參數傳遞。

你爲什麼需要這個,出於興趣?

0

代碼是否從解決方案內運行,即在IDE調試器中運行?如果是這樣,您可以將解決方案目錄作爲$(SolutionDir)從IDE傳遞到命令行。

1

謝謝你的回答。所有都非常有幫助。我與Dror的答案一起工作,並對以下行進行了一些修改,以解決此問題,謝謝。

string folder = System.IO.Path.GetDirectoryName(dte.Solution.FullName); 

我想這樣做的原因是在同時,我確定項目的當前Subversion修訂IDE中運行的代碼,這樣我可以嵌入到正在運行的軟件版本。

這是自動完成的。見我在CodeProject寫的文章: link text

如果你看一下代碼,你會看到我執行以下操作: dirinfoSourceWorkingDir = dirInfo.Parent()家長()父();

我需要確定該解決方案目前在Visual Studio中打開的目錄,但希望有一個更清潔的方式(如果我更改目錄結構,這將打破代碼)。

希望這是有道理的!

相關問題