2014-03-26 36 views
2

我正嘗試使用TFS 2013 API創建新的構建定義。我必須參考的流程模板包含幾個自定義活動和參數。在創建構建定義時,需要動態更新某些屬性值。於是,我就反序列化使用下面的代碼的工藝參數:如何在TFS中反序列化和序列化構建過程參數

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類可以以其他方式使用嗎?或者還有其他方式來更新流程參數,以便它能夠反映在構建定義中。任何幫助,高度讚賞。

回答

3

現在工作正常。 下面是新的代碼:

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

相反的defaultTemplate.Parameters,我需要通過defaultTemplate.ProcessParameters