当向参数添加默认值时,来自重新承载的设计器(WF 4)的结果会出现问题。其他情况下似乎都可以正常工作。这是(几乎)空工作流的(简化)xaml。
<Activity mc:Ignorable="sap" x:Class="{x:Null}" this:_b40c.NewArg="test" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:this="clr-namespace:" xmlns:twc="clr-namespace:Telogis.Workflow.CustomerApi;assembly=Telogis.Workflow.Activities"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<x:Members>
<x:Property Name="AuthenticationHeader" Type="InArgument(twc:AuthenticationHeader)" />
<x:Property Name="BaseTdeUri" Type="InArgument(x:Uri)" />
<x:Property Name="NewArg" Type="InArgument(x:String)" />
</x:Members>
<sap:VirtualizedContainerService.HintSize>654,676</sap:VirtualizedContainerService.HintSize>
<mva:VisualBasic.Settings>Assembly references and imported namespaces serialized as XML namespaces</mva:VisualBasic.Settings>
<Flowchart />
</Activity>
字符串
具体来说,当添加默认值时,会对定义进行以下添加:this:_b40c.NewArg="test"
和xmlns:this="clr-namespace:"
xmlns:this="clr-namespace:"
无效,因为它不指向任何地方,并且不能用ActivityXamlServices.Load(stream);
进行解析(它会抛出XamlObjectWriterException:“'Cannot set unknown member '{clr-namespace:}_b40c.NewArg '.')无论参数的指定类型是什么,都会出现这种情况。
知道是什么引起的吗
更新
首先,我使用ActivityBuilder
来利用Activity。这很好,但由于我没有提供名称,它必须生成一个密钥,在上面的示例中,_b40c
。ActivityXamlServices.Load
在处理这些密钥时遇到了一些问题。然而,简单地为ActivityBuilder
定义一个名称似乎就可以了。
这仍然不能回答为什么它创建了没有实际名称空间的xmlns:this="clr-namespace:"
。
2条答案
按热度按时间bt1cpqcv1#
您的工作流xaml无效。我不知道您从哪里得到它,也不知道它是如何进入这种状态的。
我能说出来是因为
字符串
clr样式的命名空间声明无效。它应该为
第一个月
或
clr-namespace:Some.Namespace;assembly=SomeAssemblyWithSomeNamespace
个由于您的声明格式不正确,XamlObjectWriter无法解析thisxml命名空间,以确定您的
_b40c
类型存在于哪个命名空间/程序集中。此外,这看起来也非常可疑。而且我以前从未见过x:Class
设置为null。这也让我感到格式不正确。oogrdqng2#
如果我理解得很好-这是 WF Designer 错误。
当我不得不在我的自定义WF设计器中支持
InArgument<T>
的默认值定义时,我就遇到过这个问题。故障原因有2个:
x:Class
属性中{x:Null}
的定义1.无效的
xmlns:this
属性定义1.主要问题是参数默认值的定义无效:
this:_effe.MyArgument="asd"
。参数默认值的定义应该等于:MyXamlClassName.MyArgument="asd"
。例如,如果
x:Class
定义为x:Class="MyNamespace.MyClass"
,则参数定义应为this:MyClass.MyArgument="asd"
。我通过干预XAML保存过程解决了这个问题。
字符串
我添加了以下两行:
型
以下是方法定义:
型
常量定义如下:
型
此解决方案也应该可以解决您的问题。