Могу ли я использовать объектную модель TFS для взаимодействия с TFS через F #? - PullRequest
4 голосов
/ 26 мая 2010

Я ищу несколько быстрых способов сделать несколько (более) сложных запросов для тех, у кого что было проверено и тому подобное (например, в каких файлах было> 1 человек извлечено).

Я изучал F # в течение последнего года или около того и увидел возможность использовать оба функциональных аспекта F # для быстрого создания некоторых полезных и более сложных команд TFS.

Мне было интересно, если бы кто-то еще сделал это, или у меня есть какие-либо идеи о том, как бы я поступил так.

PS: я использую TFS 2005.

Спасибо

Russell

1 Ответ

6 голосов
/ 26 мая 2010

Вам понадобится Visual Studio 2005 SDK, чтобы получить необходимые сборки. SDK также включает в себя несколько примеров на C #, которые вы можете использовать в качестве ссылки, и некоторую документацию. Ни один из них не очень хорош (ИМХО), поэтому вам, вероятно, придется поискать в Google.

Я написал следующий код в качестве доказательства концепции, но он может помочь вам начать. Обратите внимание, что это написано в VS2010, поэтому вам, возможно, придется использовать операторы #I для ссылки на нужные сборки.

#light
// #I @"C:\Program Files (x86)\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies\"
#r "Microsoft.TeamFoundation"
#r "Microsoft.TeamFoundation.Client"
#r "Microsoft.TeamFoundation.WorkItemTracking.Client"
#r "Microsoft.TeamFoundation.VersionControl.Client"

open System
open System.Collections.Generic
open System.Net
open Microsoft.TeamFoundation
open Microsoft.TeamFoundation.Client
open Microsoft.TeamFoundation.WorkItemTracking.Client
open Microsoft.TeamFoundation.VersionControl.Client


type TeamFoundationClient(uri, credentials : ICredentials) =
    let server = new TfsTeamProjectCollection (Uri uri, credentials)
    let workitemStore = server.GetService(typeof<WorkItemStore>) :?> WorkItemStore
    let versionControlServer = server.GetService(typeof<VersionControlServer>) :?> VersionControlServer

    member this.ExecuteQuery wiql =
        workitemStore.Query(wiql) 
            |> Seq.cast<WorkItem>

    member this.GetWorkItem id =
        workitemStore.GetWorkItem (id : int)

    member this.GetChangeset changesetUri =
        versionControlServer.ArtifactProvider.GetChangeset (Uri changesetUri)

    member this.GetChangesets (wi : WorkItem) =
        let isChangeset (link : Link) = 
            match link with 
            | :? ExternalLink as link' when link'.LinkedArtifactUri.Contains("Changeset") -> Some (link')
            | _ -> None
        wi.Links
            |> Seq.cast<Link>
            |> Seq.choose isChangeset
            |> Seq.map (fun l -> l.LinkedArtifactUri)

    static member CreateCredentials (username : string) (password : string) (domain : string) = 
        (NetworkCredential (username, password, domain)) :> ICredentials

// Huusom

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...