2015-11-10 3 views
0

Я выполняю миграцию проектов TFS 2010 в TFS 2015 с помощью TFS API. При попытке позвонить VersionControlServer.GetLatestChangesetId() и VersionControlServer.QueryHistory(...) я столкнулся с проблемой.Возможно ли использовать TFS 2015 api для наборов QueryHistory с TFS 2010?

Я использую пакеты Team Foundation Nuget на 2015 год для предоставления DLL.

Исключение я получаю:

'VersionControlServer.GetLatestChangesetId()' threw an exception of type 'System.Xml.XmlException' 
    Data: {System.Collections.ListDictionaryInternal} 
    HResult: -2146232000 
    HelpLink: null 
    InnerException: null 
    LineNumber: 0 
    LinePosition: 0 
    Message: "Unexpected end of file." 
    Source: "System.Runtime.Serialization" 
    SourceUri: null 
    StackTrace: " at System.Xml.EncodingStreamWrapper.ReadBOMEncoding(Boolean notOutOfBand)\r\n at System.Xml.EncodingStreamWrapper..ctor(Stream stream, Encoding encoding)\r\n at System.Xml.XmlUTF8TextReader.SetInput(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsSoapMessageEncoder.ReadMessage(Stream stream)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.ReadMessage(HttpWebResponse webResponse, WebException webException, Stream responseStream, Boolean& closeResponse)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.ReadResponse(HttpWebResponse webResponse, WebException webException)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.IsAuthenticationChallenge(TfsMessage requestMessage, HttpWebResponse webResponse, WebException webException, TfsMessage& responseMessage)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendR 
equest()\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpRequestChannel.Request(TfsMessage message, TimeSpan timeout)\r\n at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs)\r\n at Microsoft.TeamFoundation.VersionControl.Client.Repository.GetRepositoryProperties()\r\n at Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer.GetLatestChangesetId()" 
    TargetSite: {SupportedEncoding ReadBOMEncoding(Boolean)} 

Исключение составляют в основном одинаковы для QueryHistory и GetLatestChangesetId. Из stacktrace похоже, что TFS может обрабатывать кодировку по-разному между 2010 и 2015 годами.

Я ищу решение, которое позволит мне запрашивать как устаревшую TFS 2010, так и нашу новую TFS 2015 через API.

+1

Вы можете попробовать использовать TFS2010 DLLs и TFS2015 Апи https://www.visualstudio.com/ REST интегрировать/api/tfvc/changesets – ds19

ответ

1

я могу использовать API для запроса из TFS2010 и TFS2015, следуя мой код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace TFSAPI 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string project = "http://xxxxx:8080/tfs/DefaultCollection"; 
      NetworkCredential nc = new NetworkCredential("username","pwd"); 
      TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(project), nc); 
      tpc.Authenticate(); 
      VersionControlServer vcs = tpc.GetService<VersionControlServer>(); 
      int cid = vcs.GetLatestChangesetId(); 
      string p = "$/ProjectName"; 
      var h = vcs.QueryHistory(p,RecursionType.Full,5); 
      Console.WriteLine("Following are the latest 5 changeset in " + p +":"); 
      foreach (Changeset item in h) 
      { 
       Console.WriteLine("{0} {1}", item.ChangesetId, item.Comment); 
      } 
      Console.WriteLine("The latest changeset ID is:" + cid); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Какие версии DLL TFS SDK вы используете? –

+0

Это: https://www.nuget.org/packages/Machado.Microsoft.TeamFoundation.Client/ –

0

Предполагая, что вы используете соответствующую версию VS для работы с TFS. С каждой крупной версией Visual Studio нам может потребоваться перестроить наши проекты для управления версиями TFS для таргетинга на новую версию объектной модели клиента. Вы хотите создать свой проект, который ссылается на DLL-файлы TFS и поддерживает смешанные среды. Вы можете взглянуть на http://blogs.msdn.com/b/phkelley/archive/2013/08/12/checkin-policy-multitargeting.aspx для подхода, который может сработать для вас.

Надеюсь, это вам поможет.

Смежные вопросы