2016-10-13 4 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, а командлеты - из TFS PowerTools 2013 года.

ответ

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() 
Смежные вопросы