我试图测试我的t4模板在我的插件的上下文之外生成的方式。我已查看https://msdn.microsoft.com/en-us/library/68shb4dw.aspx和https://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,所以这看起来很奇怪。
谢谢!