System.IServiceProvider.GetService返回非null但不能转换为特定类型

时间:2017-08-27 12:38:41

标签: c# .net visual-studio t4 envdte

我试图测试我的t4模板在我的插件的上下文之外生成的方式。我已查看https://msdn.microsoft.com/en-us/library/68shb4dw.aspxhttps://msdn.microsoft.com/en-us/library/bb166401.aspx以获取DTE和IServicePRovider。 然而,在UnitTest的上下文中会发生以下奇怪的行为:

var dte = Marshal.GetActiveObject("VisualStudio.DTE.15.0") as Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
System.IServiceProvider serviceProvider =  new Microsoft.VisualStudio.Shell.ServiceProvider(dte);

// This returns a valid System.__ComObject (not null)
object serviceInstance = serviceProvider.GetService(typeof(Microsoft.VisualStudio.TextTemplating.VSHost.STextTemplating));

// Throws an exception
var textTemplating = (Microsoft.VisualStudio.TextTemplating.VSHost.STextTemplating)serviceInstance;

例外文字:

  

System.InvalidCastException:'无法转换类型的COM   '系统.__ ComObject'到界面类型   ' Microsoft.VisualStudio.TextTemplating.VSHost.STextTemplating&#39 ;.这个   操作失败,因为QueryInterface调用COM组件   用于与IID' {508349B6-6B84-4DF5-91F0-309BEEBAD82D}的接口'   由于以下错误而失败:不支持此类接口   (来自HRESULT的异常:0x800040002(E_NOINTERFACE))。   (Microsoft.VisualStudio.OLE.Interop)

我尝试使用特定的STextTemplate GUID查询IServiceProvider并返回HRESULT = 0,所以这看起来很奇怪。

谢谢!

0 个答案:

没有答案