Carlos J. Quintero 似乎对 DTE 了解很多。在今年 3 月更新并发布在网络 ( http://www.mztools.com/articles/2007/mz2007027.aspx ) 上的一篇文章中,他说 EnvDTE 上的 Open 方法。ProjectItem 返回一个 EnvDTE.Window,其 Document 属性可以转换为 EnvDTE.TextDocument。
但是当我尝试这个时,我得到一个异常(HRESULT:0x80004002 [E_NOINTERFACE])。Open 返回的 __ComObject 似乎不知道 TextDocument:
摘自我的 VB .Net 代码(在 WOW 中在 Windows 7 Pro 64 下运行的 VS2008)的一段(摘录并稍加编辑):
... BuildEvents.OnBuildBegin 的处理程序递归遍历所有项目中的所有项目;过滤名称以查找包含“.Designer.vb”的名称(显然在这里可以正常工作)。对于每一个找到的,要替换某些文本;为此,需要 TextDocument 对象:
'the below returns __ComObject instead of EnvDTE.Window
Dim ItemWindow as EnvDTE.Window = ProjectItem.Open(EnvDTE.Constants.vsext_vk_Code)
'the below throws exception
Dim ItemTextDocument as EnvDTE.TextDocument = CType(ItemWindow.Document, EnvDTE.TextDocument)
完全错误:
Unable to cast COM object of type 'System.__ComObject' to interface type 'EnvDTE.TextDocument'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{CB218890-1382-472B-9118-782700C88115}' failed due to the following error: Interface wordt niet ondersteund (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
怎么了?任何帮助表示赞赏。