2016-10-13 7 views
0

ビルド定義をPowerShellスクリプトから更新しようとしていますが、プロセスパラメータを逆シリアル化しようとしているときに問題が発生しています。TFSビルドプロセスパラメータを取得する

マイスクリプト

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を使用しており、コマンドレットは2013 TFS PowerToolsのものです。

答えて

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() 
関連する問題