我正在尝试按照Azure和Team Foundation Build Server located here的CI教程进行操作,但是在步骤5中遇到了构建配置模板XAML文件配置的问题。配置一个新的ConvertWorkSpaceItem
,并将其添加到TFS提供的修改后的构建模板(TfvsTemplate.12.xaml),以便可以在TFS构建代理上运行自定义脚本,我尝试设置属性Workspace =&# 34; Workspace",但是给出了编译器错误:' Workspace'是一种类型,不能用作表达式。
我已经完成了一些故障排除,并且发生在其他人身上的错误 - 没有确定CreateWorkSpaceItem
的范围,或使用错误版本的TFS或Visual Studio - 似乎不是问题。我把逻辑正确地放在" Run on Agent"块,所以范围应该是正确的,Visual Studio和我的TFS服务器都运行2013.我唯一的想法是指令已经过时,还有一些其他需要采取的步骤,我缺少。有什么想法吗?
编辑: Here are the parameters表示第一个失败的转换项。第二个失败的转换项目类似。输入和结果变量是我为工作流定义的参数,作为本教程说明的一部分。显示的错误是:"编译器错误遇到处理表达式"工作区"。 '工作区'是一种类型,不能用作表达式。"
答案 0 :(得分:1)
好的,现在已经出现了几次,对于TFS 2013。
内置的变量曾用于
SourcesDirectory,Binaries Directory和Workspace
这些在TFS 2013中不再可用,您现在必须使用
Microsoft.TeamFoundation.Build.Activities.Extensions.WellKnownEnvironmentVariables
访问这些。
获取工作区有点复杂,但是如果你分配一些局部变量,你应该能够得到工作区对象。
声明sourcesDirectory(string)和buildDetail(IBuildDetail)和workSpace(Workspace)的局部变量,将其范围设置为整个工作流程
创建GetEnvironmentVariable Activity并将其 Result 值设置为sourcesDirectory并使用Microsoft.TeamFoundation.Build.Activities.Extensions.WellKnownEnvironmentVariables.SourcesDirectory。
对buildDetail = WellKnownEnvironmentVariables.BuildDetail重复相同的操作
为workSpace对象创建一个assign任务,将其设置为 workSpace = “[buildDetail.BuildServer.TeamProjectCollection.GetService()。GetWorkspace(sourcesDirectory)]”
然后,这应该为您提供一个Workspace对象。
注意:语法可能略有不足。
为了补充删除这些变量,MS添加了一个新的活动
GetLocalPath
可能对您有用