我正在編寫一些設計時間代碼。我想用這個片段:(找到here)在不對外部地址進行編碼時獲取當前的EnvDTE或IServiceProvider
var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}
問題是,這不能編譯。 (GetService不是已知的方法調用)我嘗試添加Microsoft.VisualStudio.Shell(和Microsoft.VisualStudio.Shell.10.0),但它沒有幫助。
在互聯網上,我發現你需要一個IServiceProvider來調用它。
但是所有顯示如何獲取IServiceProvider的示例都使用EnvDTE。
因此,要獲得當前的EnvDTE,我需要IServiceProvider。但要獲得IServiceProvider,我需要一個EnvDTE。 (有一個在我的水桶一個洞...)
所以,這裏是我的問題:
在一個正常的WPF應用程序,我怎麼能得到當前實例EnvDTE的?
注意:我不尋找任何舊的EnvDTE實例。我需要一個爲我當前的Visual Studio實例(我在同一時間運行Visual Studio的3-4實例。)
就是這裏你WPF代碼一個單獨的進程完全,或WPF代碼還在裏面視覺運行工作室通過其他機制? –
@jason - 只是一個正常的WPF應用程序。我計劃在設計時運行它。但是我會很滿意一個可以在運行時工作的例子(例如在一個OnClick事件中)。 (創建一個新的WPF應用程序,在窗口上拖動一個按鈕,然後雙擊它。) – Vaccano
您需要使用正確的名稱來調用GetActiveObject以獲得所需的VS實例。這是您需要的信息:http://msdn.microsoft.com/en-us/library/ms228755.aspx? –