public static string GetXml(Dictionary<string, object> parameters)
{
return XamlWriter.Save(parameters);
}
의 직렬화 복원을 위해 XamlReader를 사용할 수있을 때 가능하지 XamlWriter.Save와 사전 <문자열, 개체> 역 직렬화하는 이유.TFS 2010 : 나는 위의 문은 <code>NotSupportedException</code>을 반환
이상한 점은 XamlReader
을 사용하여 사전을 직렬화 할 수 있다는 것입니다.
public static Dictionary<string, object> GetParameters(IBuildDetail buildDetail, string buildDefinition)
{
var tfsProject = buildDetail.BuildDefinition.TeamProject;
var buildServer = buildDetail.BuildServer;
var buildDef = buildServer.GetBuildDefinition(tfsProject, buildDefinition);
using (var stringReader = new StringReader(buildDef.ProcessParameters))
{
using (var xmlTextReader = new XmlTextReader(stringReader))
{
return (Dictionary<string, object>) XamlReader.Load(xmlTextReader);
}
}
}
는 XML : 그것은 XamlReader/XamlWriter를 사용하는 필수
<?xml version="1.0" ?>
<Dictionary x:TypeArguments="x:String, x:Object" xmlns="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:mtbwa="clr-namespace:Microsoft.TeamFoundation.Build.Workflow.Activities;assembly=Microsoft.TeamFoundation.Build.Workflow" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<mtbwa:BuildSettings ProjectsToBuild="$/XXX/Product/Company.XXX.Common/Company.XXX.Common.Basic/Company.XXX.Common.Basic.csproj" x:Key="BuildSettings">
<mtbwa:BuildSettings.PlatformConfigurations>
<mtbwa:PlatformConfigurationList Capacity="4">
<mtbwa:PlatformConfiguration Configuration="DEMO" Platform="AnyCPU"/>
<mtbwa:PlatformConfiguration Configuration="Release" Platform="AnyCPU"/>
</mtbwa:PlatformConfigurationList>
</mtbwa:BuildSettings.PlatformConfigurations>
</mtbwa:BuildSettings>
<mtbwa:TestSpecList Capacity="0" x:Key="TestSpecs"/>
<x:String x:Key="BuildNumberFormat">
$(BuildDefinitionName) 6.0.0$(Rev:.r)
</x:String>
<mtbwa:CodeAnalysisOption x:Key="RunCodeAnalysis">
Never
</mtbwa:CodeAnalysisOption>
<mtbwa:AgentSettings MaxWaitTime="00:15:00" TagComparison="MatchExactly" Tags="" x:Key="AgentSettings"/>
<x:Boolean x:Key="AssociateChangesetsAndWorkItems">
False
</x:Boolean>
<x:Boolean x:Key="CreateWorkItem">
False
</x:Boolean>
<x:Boolean x:Key="PerformTestImpactAnalysis">
False
</x:Boolean>
<x:Boolean x:Key="CreateLabel">
False
</x:Boolean>
<x:Boolean x:Key="DisableTests">
True
</x:Boolean>
<x:Boolean x:Key="DoCheckinAssemblyInfoFiles">
True
</x:Boolean>
<x:String x:Key="AssemblyVersionPattern">
6.0.0.0
</x:String>
<x:String x:Key="AssemblyFileVersionPattern">
6.0.0.B
</x:String>
<x:Boolean x:Key="UseObfuscation">
True
</x:Boolean>
<x:String x:Key="ObfuscatorFilePath">
C:\Program Files (x86)\LogicNP Software\Crypto Obfuscator For .Net 2011 R3\co.exe
</x:String>
<x:String x:Key="ObfuscatorProjectFile">
$/XXX/Product/BuildProcess/Company.XXX.ZZZ.obproj
</x:String>
<x:String x:Key="ProjectPath">
$/XXX/Product/Company.XXX.Common
</x:String>
</Dictionary>
아니요, 필수는 아니지만 동일한 스키마를 가져와야합니다. DataContractSerializer를 사용하면 스키마가 변경됩니다. – Rookian