Расширяемость Visual Studio/TFS: почему DocumentService дает мне InvalidCastException?

Я пишу надстройку для 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

Вот полный текст исключения:

Не удалось преобразовать COM-объект типа "System.__ComObject" в тип класса "Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.DocumentService". Экземпляры типов, которые представляют компоненты COM, не могут быть преобразованы в типы, которые не представляют компоненты COM; однако они могут быть преобразованы в интерфейсы, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.

Я попросил поставщика услуг для DocumentService, и он дал мне кое-что, но это говорит мне, что на самом деле это не DocumentService. В чем дело? Как мне получить DocumentService, чтобы узнать, что это DocumentService, или как получить что-то, что на самом деле одно?

редактирование: я также пытался удалить "As DocumentService", чтобы обойти недопустимое приведение, но больше ничего об объекте нельзя обнаружить, когда я проверяю его как Watch. Я также попробовал следующее (рекомендуется здесь), надеясь, что это поможет пролить свет на проблему:

    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", просто подтверждая мое негодование. Я действительно понятия не имею, что с этим делать.

Эта статья ближе всего к тому, что у меня возникла такая же проблема, но на нее не было ответа: как открыть WorkItem (VS-Team Explorer) из-за пределов визуальной студии?,

Спасибо!

0 ответов

Другие вопросы по тегам