3

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)).

なにが問題ですか?どんな助けでも感謝します。

4

1 に答える 1

2

私は同じ問題に遭遇しました

window オブジェクトから取得するドキュメントの種類を指定することで、これを修正できます。

public static void SetCode(ProjectItem projectItem, string newCode)
{

    Window EditWindow = projectItem.Open(Constants.vsext_vk_Code);
    EditWindow.Visible = true; //hide editor window

    TextDocument TextDocument = (TextDocument)EditWindow.Document.Object("TextDocument");

    EditPoint EditPoint = TextDocument.StartPoint.CreateEditPoint();
    EditPoint.Delete(TextDocument.EndPoint); //delete content
    EditPoint.Insert(newCode);

    EditWindow.Close(vsSaveChanges.vsSaveChangesYes);
}

それを自分でVB.NETに変換する必要があります

于 2013-06-18T18:12:10.157 に答える