如何通过 MSTest 在集成测试期间托管 VS IDE?

How to host VS IDE during integration test via MSTest?

我已经创建了一个集成测试项目来测试 VS 扩展。如果我 运行 来自 Visual Studio IDE 的测试,所有测试都 运行ning 就好了,每个方法都会产生一个新的 VS IDE。测试方法标有以下属性:

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

但是,如果我尝试自动化测试,并且 运行 通过 MSTest(或 VSTest)从命令行进行测试,我收到以下错误消息,对于托管在 VS IDE 中的测试:

The host type 'VS IDE' cannot be loaded for the following reason: The key 'VS IDE' cannot be found. Make sure that the appropriate host adapter is installed on the machine.

因此我试图在 MSDN - How to: Install a Host Adapter 找到解决方案。但它只记录了 VS2005 和 2008。

我想问问关于VS 2013的方向,我在哪里可以找到更多信息?或者我错过了什么?从 VS IDE 外部进行 运行 集成测试的正确方法是什么?如何以编程方式托管 IDE?

提前致谢!

我知道了如何在不使用 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 对象。