如何在TFS中反序列化和序列化构建过程参数

本文关键字:序列化 构建 过程 参数 反序列化 TFS | 更新日期: 2023-09-27 17:53:19

我正在尝试使用TFS 2013 API创建一个新的构建定义。我必须引用的流程模板包含几个自定义活动和参数。在创建Build Definition时,需要动态更新某些属性值。因此,我尝试使用以下代码反序列化过程参数:

IDictionary<string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(defaultTemplate.Parameters);

这段代码总是抛出下面的异常:

An unhandled exception of type 'System.Xaml.XamlObjectWriterException' occurred in System.Xaml.dll
Additional information: No matching constructor found on type 'System.Activities.Activity'. You can use the Arguments or FactoryMethod directives to construct this type.

这真是令人沮丧,我还不能摆脱这个错误。

我还尝试使用下面的代码来反序列化过程参数:

using (StringReader stringReader = new StringReader(parameterValues))
{
    object obj = XamlServices.Load(
          ActivityXamlServices.CreateReader(
              new XamlXmlReader((TextReader)stringReader, new XamlXmlReaderSettings { LocalAssembly  = System.Reflection.Assembly.GetExecutingAssembly() }
    )));
}

这是有效的,但是当我使用XamlServices.Save(XamlWriter writer, object instance)方法再次序列化它时,参数发生了变化,这与构建工作流不兼容。

那么,我如何在这里更新构建过程参数呢?WorkflowHelpers级是否可以用于其他用途?或者是否有其他方法来更新流程参数,以便在构建定义中得到反映。

如何在TFS中反序列化和序列化构建过程参数

现在工作正常。下面是新代码:

IDictionary<string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(defaultTemplate.ProcessParameters);

我需要传递defaultTemplate.ProcessParameters而不是defaultTemplate.Parameters