4

私は Microsoft Outlook 2007 用のアドインを作成しています。私の目標は、Visual Studio 2010 インスタンスで作業項目を開くことです。このインスタンスには、TFS 2012 用のパッケージが読み込まれていることがわかっています。次のコードは、最後の行が表示されるまで正常に動作します。私に InvalidCastException:

Imports Microsoft.VisualStudio.TeamFoundation.WorkItemTracking
Imports Microsoft.TeamFoundation.Client
Imports Microsoft.VisualStudio.OLE.Interop
Imports Microsoft.VisualStudio.Shell


Private Sub Test()

    Dim vsObj As IServiceProvider = System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0")
    Dim sp As New ServiceProvider(vsObj)
    Dim docService As DocumentService = sp.GetService(GetType(DocumentService))

    ... do stuff with docService ...

End Sub

完全な例外テキストは次のとおりです。

タイプ 'System.__ComObject' の COM オブジェクトをクラス タイプ 'Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.DocumentService' にキャストできません。COM コンポーネントを表す型のインスタンスは、COM コンポーネントを表さない型にキャストできません。ただし、基になる COM コンポーネントがインターフェイスの IID に対する QueryInterface 呼び出しをサポートしている限り、インターフェイスにキャストできます。

サービス プロバイダーに DocumentService を依頼したところ、何かが表示されましたが、実際には DocumentService ではないことがわかりました。どうしたんだ?DocumentService にそれが DocumentService であることを認識させるにはどうすればよいですか、または実際に DocumentService であるものを取得するにはどうすればよいですか?

編集:無効なキャストを回避するために「As DocumentService」も削除しようとしましたが、ウォッチとして検査すると、オブジェクトについて他に何も発見できません。また、問題に光を当てることを期待して、次のことも試しました(ここで推奨):

    Dim vsObj As IServiceProvider = System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0")
    Dim sp As New ServiceProvider(vsObj)
    Dim docService = sp.GetService(GetType(DocumentService))

    'Note that I still didn't specify a type for docService above.
    MsgBox(Microsoft.VisualBasic.Information.TypeName(docService))

恐ろしいことに、メッセージ ボックスには「DocumentService」とあり、単に私の憤りを再確認するだけでした。私は本当にそれをどうするか分かりません。

この関連記事は、同じ問題を抱えている人に最も近いものですが、回答がありませんでした: How to open WorkItem (VS-Team Explorer) from outside Visual Studio? .

ありがとうございました!

4

0 に答える 0