- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
public static string GetXml(Dictionary<string, object> parameters)
{
return XamlWriter.Save(parameters);
}
上述语句返回一个NotSupportedException
。
奇怪的是我可以使用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:
<?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>
最佳答案
我用了JetBrains dotPeek了解 Microsoft 如何序列化和反序列化 Dictionary<string, object>
适用于 TFS 2010 工作流。
他们使用反序列化: Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.DeserializeProcessParameters(string parameterValues)
他们使用序列化: WorkflowHelpers.SerializeProcessParameters(IDictionary<string, object> parameterValues)
程序集:Microsoft.TeamFoundation.Build.Workflow.dll
我最初的问题是我试图添加 IBuildRequest.ProcessParameters
排队构建之前的值。
private static void SetProcessParametersForSubBuild(IBuildRequest buildRequest, Dictionary<string, object> processParametersForSubBuild, IBuildDefinition buildDefinition)
{
var subBuildProcessParameters = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);
if (processParametersForSubBuild.Any())
{
foreach (var processParameter in processParametersForSubBuild)
{
if (subBuildProcessParameters.ContainsKey(processParameter.Key))
{
subBuildProcessParameters[processParameter.Key] = processParameter.Value;
}
else
{
subBuildProcessParameters.Add(processParameter.Key, processParameter.Value);
}
}
buildRequest.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(subBuildProcessParameters);
}
}
队列构建:
var queuedBuild = buildServer.QueueBuild(buildRequest);
关于c# - TFS 2010 : Why is it not possible to deserialize a Dictionary<string, object> with XamlWriter.Save 当我可以使用 XamlReader 进行反序列化时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581474/
我有点被困在这里了。我正在使用 dragndrop-library,它通过 XamlWriter.Save() 序列化拖动的 UIElement。 现在我正在尝试拖放扩展 Grid 的类的一些实例。在
我正在尝试使用 XamlWriter 保存一组对象以最简单的方式。由于某种原因,将它们保存为数组会产生无效的 XML: var array = new int[] {1, 2, 3}; Console
这个问题在这里已经有了答案: C# Attribute XmlIgnore and XamlWriter class - XmlIgnore not working (1 个回答) 关闭 3 年前。
考虑我的 UserControl 中的以下 XAML: 以及关联的事件处理程序: private void TextBlock_OnLoaded(object sender, RoutedEvent
我正在使用 XamlWriter 序列化一组 WPF 对象。这些对象之一是 Image 控件,其 Source 设置为磁盘上的文件。 当 XamlWriter 序列化对象时,它将源图像设置为指向文件系
我正在编写一个应用程序,用户可以在其中将元素放置到 Canvas 上并自定义它们以创建图片。我已经能够将图片保存为位图,但需要能够序列化并保存 Canvas 的 XAML 代码本身,以便我可以反序列化
我正在使用以下方法尝试克隆 TreeViewItem,但一旦它命中 XamlWriter.Save(),它就会给我一个 StackOverflowException。 触发这个的代码是: var b
我正在为 WPF 应用程序制作一个主题编辑器。我动态生成 XAML 文件,然后将它们编译到应用程序使用的 DLL 中。用于生成 XAML 文件的代码遵循以下原则: var dictionary = n
我知道标准 XamlWriter 不会保留绑定(bind)。但真正糟糕的是绑定(bind)持有的当前值也没有被序列化。 我当前的 - 非常愚蠢 - 解决方法是创建 DependencyProperty
我将 FlowDocument 与包含(或作为基类)一些自定义 block 的 BlockUIContainer 和 InlineUIContainer 元素一起使用 - SVG、数学公式等。由于使用
我有一个类,包含标记为 [XmlIgnore] 的属性 Brush MyBrush。然而,它在流中序列化,导致在尝试通过 XamlReader 读取时出现问题。 我做了一些测试,例如当更改属性的可见性
我有一个自定义的 ContentControl public class DataControl : ContentControl { public List Options {
public static string GetXml(Dictionary parameters) { return XamlWriter.Save(parameters); } 上述语句返
我是一名优秀的程序员,十分优秀!