gpt4 book ai didi

c# - 如何解析服务器上 TFS 文件夹的根路径和相对路径?

转载 作者:太空狗 更新时间:2023-10-29 20:01:10 24 4
gpt4 key购买 nike

我创建了一个 CodeActivity用于(自定义)构建定义。在执行其主要目的之前,此事件需要将位于服务器上的文件复制到/从“源目录”、“自定义文件夹”到“放置目录”(等)等位置。

我拥有的一些变量是有效路径,但其他变量显然是“相对路径”的占位符。但是,我需要物理服务器路径,以便来回复制有用的项目。

我需要这样的东西:

  • 项目根目录的物理路径(见下图)
  • 能够解析自定义文件夹的物理路径(见下图)
  • 如果能够从“相对路径”解析物理路径就好了

当然,我可以将项目名称传递到事件中(用于解析目的)...因为那样会很“俗气”。

我的问题是:

  • 如何解析 TFS 项目根目录的物理路径?
  • 解析根目录后,我能否依靠它来“构建”自定义文件夹的路径?
  • 如何从“$/Test/Drops”等相对路径获取服务器路径?

一些我知道如何获得的东西的例子:
这些元素有些用处,而其他的……没那么有用。除非,我可以使用它们来获取物理服务器路径。

构建目录:
'F:\bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages'

BuildDetail.DropLocationRoot:
'$/测试/掉落'
...希望我有物理路径

BuildDetail.BuildController.CustomAssemblyPath:
'$/测试/BuildProcessTemplates'
...希望我有物理路径

资源目录:
'F:\bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages\src'

工作区.文件夹:
'F:\bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages\src\Test\NuGet.Research\net35'

一些我想要的东西的例子:
enter image description here

更新:2/2/2015
@Edward - 根据您的要求。下面是对我要完成的工作的更详细解释。

enter image description here enter image description here

最佳答案

让我先说这个答案有很多术语重载,所以我想定义一些东西:

  • 服务器路径:文件或文件夹在版本控制系统中的路径。例如,$/Test/BuildResources 是一个服务器路径。这是绝对服务器路径,不是相对路径。
  • 本地路径:您将服务器路径映射到您机器上的路径。例如,D:\Test\BuildResources/home/me/test/buildresources 是一个本地路径
  • 映射:服务器路径和本地路径之间的对应关系 - 以便 TFVC 在您执行“获取”时知道将文件放在本地机器上的什么位置。

我对此的定义不是迂腐,而是因为在使用 TFS SDK 时使用正确的术语会有所帮助,这将使您可以轻松查询给定服务器路径的本地路径(反之亦然)。 (您不应该简单地将路径组件连接在一起,因为 TFVC 允许非常复杂的工作空间映射。)

要开始使用 TFS SDK,您首先需要找到服务器连接信息。如果您有给定的本地路径(在本例中为您的 SourcesDirectory),您可以使用它来读取工作区缓存并获取构建服务器创建的服务器连接所需的信息:

// Get the workspace information for the build server's workspace
var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(sourcesDirectory);

// Get the TFS Team Project Collection information from the workspace cache
// information then load the TFS workspace itself.
var server = new TfsTeamProjectCollection(workspaceInfo.serverUri);
var workspace = workspaceInfo.GetWorkspace(server);

有了工作区后,您可以查询它的路径映射。它将根据您的工作区映射进行从服务器到本地路径的必要转换。例如:

workspace.GetServerItemForLocalItem("D:\My\Local\Path");

workspace.GetLocalItemForServerItem("$/My/Server/Path");

但是,只有当您的构建定义实际设置工作区以包含这些文件时,此机制才会起作用。如果您需要某个目录 $/Foo/Bar,您需要确保它包含在构建定义的源设置详细信息选项卡中。

关于c# - 如何解析服务器上 TFS 文件夹的根路径和相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com