2015-07-03 2 views
0

Итак, я пытаюсь отобразить все доступные тестовые классы TFS в редакторе параметров рабочего процесса настраиваемого типа. See my previous question.Получить соединение TFS в редакторе параметров рабочего процесса рабочего процесса

Теперь я могу установить соединение с моим экземпляром TFS с помощью .Net TFS API так же, как и обычное клиентское приложение. Но мне пришлось бы вставить URL-адрес в мою TFS в пользовательской сборке, и этого я бы хотел избежать.

Это заставило меня подумать: этот код работает в Visual Studio, поэтому как-то можно получить информацию о текущем подключении TFS. После поиска в Интернете многие разные сайты показали код о том, как это сделать в обычном расширении Visual Studio. Так что я собрал что-то вроде этого:

public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     if (provider != null) 
     { 
      EnvDTE80.DTE2 dte; 
      dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0"); 
      MessageBox.Show("Got dte: " + dte.ActiveDocument.ToString()); 

      TeamFoundationServerExt ext = dte.DTE.GetObject("Microsoft.VisualStudio.TeamFoundation.TeamFoundationServerExt") as TeamFoundationServerExt; 
      MessageBox.Show("Got tfs: " + ext); 

Я могу получить объект DTE, вызывая метод ToString() дает мне System.__ComObject, так что эта часть appearantly работает. Но когда я пытаюсь получить объект TeamFoundationServerExt, я всегда получаю null

Любые советы, почему это не сработает?

ответ

0

Итак, как оказалось, вам не нужно использовать вещи DTE.

Вы на самом деле можете получить соединение TFS так:

var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition)); 
var tpc = builddef.BuildServer.TeamProjectCollection; 
var tp = builddef.TeamProject; 
Смежные вопросы