1

我已經創建了一個集成測試項目來測試VS擴展。如果我從Visual Studio IDE運行測試,所有測試都運行得很好,每種方法都會產生一個新的VS IDE。測試方法上標有以下屬性:如何通過MSTest在集成測試期間託管VS IDE?

[HostType("VS IDE")] 
[TestMethod] 
public void TestWhateverMethod() { ... } 

但是,如果我嘗試測試自動化,以及命令行通過MSTest的(或VSTest)運行它們,我得到了以下錯誤消息,對於託管測試在VS IDE中:

由於以下原因無法加載主機類型'VS IDE':無法找到 鍵'VS IDE'。確保機器上安裝了適當的主機 適配器。

因此我試圖找到解決方案:MSDN - How to: Install a Host Adapter。但它只記錄了VS2005和2008.

我想詢問有關VS 2013的指示,哪裏可以找到更多?或者我錯過了什麼?從VS IDE之外運行集成測試的正確方法是什麼?如何以編程方式託管IDE?

預先感謝您!

回答

2

我意識到如何去做,而不使用HostType屬性。希望下面的代碼片段可以幫忙他人,以及:

Type visualStudioType = Type.GetTypeFromProgID("VisualStudio.DTE.12.0", true);  
DTE env = Activator.CreateInstance(visualStudioType, true) as DTE; 

這將得到VS的類型,與指定的版本,將扔在錯誤的異常。 DTE將成爲EnvDTE的接口,可供人們使用。

要獲得服務,請執行以下操作獲取UI Shell:

ServiceProvider serviceProvider = new ServiceProvider(env as 
Microsoft.VisualStudio.OLE.Interop.IServiceProvider); 
IVsUIShell uiShell = (IVsUIShell)serviceProvider.GetService(typeof(SVsUIShell)); 

應該跟蹤服務,獲取rcw句柄並在使用之後正確釋放COM對象。

相關問題