Расширяемость 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) из-за пределов визуальной студии?,
Спасибо!