Carlos J. Quintero は DTE についてよく知っているようです。今年の 3 月に更新され、Web 上で公開された記事 ( 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)).
なにが問題ですか?どんな助けでも感謝します。