【问题标题】:Get TFS Build Process Parameters获取 TFS 构建过程参数
【发布时间】:2016-10-14 03:58:49
【问题描述】:

我正在尝试从 PowerShell 脚本更新构建定义,但在尝试反序列化进程参数时遇到了问题。

我的脚本

add-type -Path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll'
add-type -Path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Client.dll'
add-type -Path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Common.dll'
add-type -Path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Workflow.dll'

$tfsCollectionUrl = "http://{myurl}/tfs/{mycollection}"
$server = new-object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(New-Object Uri($tfsCollectionUrl))
$buildServer = $server.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildDef = $buildServer.GetBuildDefinition("{MyProjectName}", "{MyBuildName}")
$processParams = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildDef.ProcessParameters)
$processParams

还有错误

Exception calling "DeserializeProcessParameters" with "1" argument(s): "Set property 'Microsoft.TeamFoundation.Build.Common.BuildParameter.Json' threw an exception."
At line:14 char:1
+ $processParams = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHel ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : XamlObjectWriterException

我所看到的关于如何做我想做的事情(即更新内部版本号格式)的所有内容都给了我这个确切的代码,所以不知道从哪里开始。构建定义和过程参数确实回来了,只是不是以我真正可以使用的方式。

我们使用的是 TFS 2013 Update 4,cmdlet 来自 2013 TFS PowerTools。

【问题讨论】:

    标签: powershell tfs


    【解决方案1】:

    我缺少对 Newtonsoft.Json.dll 的引用:

    Add-Type -Path "C:\Folder\SharedAssemblies\Newtonsoft.Json.dll"
    

    我把它加进去了,一切都很好。

    最终脚本:

    Add-Type -Path "C:\{Folder}\SharedAssemblies\Newtonsoft.Json.dll"
    Add-Type -Path "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll"
    Add-Type -Path "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Client.dll"
    Add-Type -Path "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Workflow.dll"
    
    $tfsCollectionUrl = "http://{myurl}/tfs/{mycollection}"
    $server = new-object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(New-Object Uri($tfsCollectionUrl))
    $buildServer = $server.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
    
    $buildDefinition = $buildServer.GetBuildDefinition("{MyProjectName}", "{MyBuildName}")
    
    $processParams = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildDefinition.ProcessParameters)
    $processParams.BuildNumberFormat = "`$(BuildDefinitionName)_`$(Year:yy).222.0`$(Rev:.r)"
    
    $buildDefinition.ProcessParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::SerializeProcessParameters($processParams)
    $buildDefinition.Save()
    

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 2014-12-08
      • 2023-03-24
      • 2015-09-09
      • 2021-07-04
      • 1970-01-01
      • 2014-06-30
      • 2013-10-10
      • 2014-09-06
      相关资源
      最近更新 更多