在TFS中的项目中获取DLL文件版本

时间:2013-09-19 21:02:32

标签: c# .net dll tfs

我在WPF中创建了一个工具,供我们的开发人员轻松跟踪特定的DLL。通过这种方式,他们知道哪些项目已经过时的DLL(或者没有被广泛实现的DLL版本,比如2.2,但我们在2.1)。现在,它扫描目录,提供一个起点,以获取有关指定DLL的信息。

这非常有效,但如果可以通过TFS API直接完成,则会出现一个问题。我想知道是否有可能获得文件版本而无需映射/获取最新版本。换句话说,循环遍历所有项目(在其最新版本中)并直接通过TFS API收集DLL的版本号。一种方法是简单地让某人将所有项目映射到硬盘驱动器上并直接在根上运行该工具。但是,这不太方便。

我想知道是否有人可以指出我正确的方向。这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

有一个非常简单的解决方案,但它要求您从TFS下载文件。在任何情况下,您都需要一个用户帐户,以便您可以找到DLL文件。以下是一些代码片段:

获取DLL文件列表:

        TfsTeamProjectCollection tfcollection = new TfsTeamProjectCollection(new Uri("URL"), new System.Net.NetworkCredential("USERNAME", "PASSWORD"));
        VersionControlServer server = tfcollection.GetService<VersionControlServer>();

        //Obtain all DLLs. You can narrow this down to the specific one's you want
        ItemSet items = server.GetItems("$/*.dll", RecursionType.Full);

为了下载文件,我简化了一些事情以使其更容易。要循环浏览文件,您可以:

        foreach (Item item in items.Items)

现在您要下载文件。这很慢,但会阻止算法重新创建TFS文件夹结构:

       string[] split = item.ServerItem.ToString().Split('/');

       //This may not work if you have files in the root
       item.DownloadFile(split[split.Length - 1]);

这将下载您的DLL文件,以便您可以从中提取数据。不幸的是,你不能直接通过TFS这样做,所以我们需要一份副本。既然你这样做,你可以提取DLL版本:

     FileVersionInfo.GetVersionInfo(localFileLocation).FileVersion

您呈现数据的方式显然取决于您。为简单起见,我只是将带有item.ServerItem的版本号转储到文本文件中。

希望如果有人在寻找类似的东西,这会有所帮助!