Pri*_*ERO 7 c# tfs workflow-activity tfsbuild
我已经创建了一个CodeActivity,用于(自定义)构建定义.在执行其主要目的之前,此活动需要将位于服务器上的文件复制到/从"源目录","自定义文件夹"等位置复制到"放置目录"(等).
我所拥有的一些变量是有效路径,但其他变量显然是"相对路径"的占位符.但是,我需要物理服务器路径,以便我可以来回复制有用的项目.
我需要的东西:
当然,我可以将项目名称传递给活动(用于解析目的)......因为那只是'俗气'.
我的问题是:
我知道如何获得的一些事实:
这些项目有些用处,而其他项目......并非如此.除非,我可以使用它们来获取物理服务器路径.
BuildDirectory:
'F:\ bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages'
BuildDetail.DropLocationRoot:
'$/Test/Drops'
...希望我有物理路径
BuildDetail.BuildController.CustomAssemblyPath:
'$/Test/BuildProcessTemplates'
...希望我有物理路径
SourcesDirectory:
'F:\ bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages\src'
Workspace.Folders:
'F:\ bld\Builds\41\Test\Test_CustomActivity_CreateNuGetPackages\src\Test\NuGet.Research \net35'
我想要的一些例子:

更新:2015年
2月2 日 @Edward - 根据您的要求.下面是我想要完成的更详细的解释.

Edw*_*son 14
让我先说这个答案,说有很多术语重载,所以我想定义一些东西:
$/Test/BuildResources是服务器路径.这是一个绝对的服务器路径,它不是相对的.D:\Test\BuildResources或者/home/me/test/buildresources是本地路径.我认为这不是迂腐,但是因为在使用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);
Run Code Online (Sandbox Code Playgroud)
有了工作区后,可以查询它以获取路径映射.它将根据您的工作空间映射从服务器到本地路径进行必要的转换.例如:
workspace.GetServerItemForLocalItem("D:\My\Local\Path");
Run Code Online (Sandbox Code Playgroud)
和
workspace.GetLocalItemForServerItem("$/My/Server/Path");
Run Code Online (Sandbox Code Playgroud)
但是,如果构建定义实际上将工作空间设置为包含这些文件,则此机制将起作用.如果您需要某个目录$/Foo/Bar,则需要确保它包含在"构建定义"的"源设置详细信息"选项卡中.
| 归档时间: |
|
| 查看次数: |
6959 次 |
| 最近记录: |