[英]How to correctly save a WF4 ActivityBuilder
我目前正在保存我的.NET FX 4.0.1 StateMachine活动,如下所示:
var sb = new StringBuilder();
var xamlWriter = ActivityXamlServices.CreateBuilderWriter(
new XamlXmlWriter(new StringWriter(sb),
new XamlSchemaContext()));
XamlServices.Save(xamlWriter, activityBuilder);
return sb.ToString();
这很好,生成的XAML看起来很好。 不幸的是,它无效。 我可以使用ActivityXamlServices.Load
读回来,但是当我执行它时,它说它不知道工作流中定义的属性。 在Visual Studio设计器中打开它会产生相同的错误:
编译器错误遇到处理表达式“ActiveCall”。 “ActiveCall”未声明。 由于其保护级别,它可能无法访问。
通过比较原始XAML和我的代码生成的XAML,我发现了如何解决这个问题。 我必须在StateMachine
标记之前使用此标记:
<mva:VisualBasic.Settings>
Assembly references and imported namespaces for internal implementation
</mva:VisualBasic.Settings>
顺便说说:
标记内的文本必须与此完全相同,否则在VS中打开WF时会出错:
无法从文本'FooBar'创建“设置”
题:
我需要在代码中更改以在生成的XAML中包含此标记吗?
我想我找到了答案。
在调用Save
之前我必须使用以下代码:
VisualBasic.SetSettings(activityBuilder, new VisualBasicSettings());
如果已从DynamicActivity
创建activityBuilder
,则最好使用以下代码:
VisualBasic.SetSettings(activityBuilder,
VisualBasic.GetSettings(dynamicActivity));
如果未使用此选项,则只有扩展方法所需的名称空间不会写入XAML,并且在加载和执行XAML时会导致错误。
我总结了我对代码项目的发现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.