繁体   English   中英

如何正确保存WF4 ActivityBuilder

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM