c# - 如何正确保存 WF4 ActivityBuilder

标签 c# workflow-foundation-4 workflow-foundation

我目前正在像这样保存我的 .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 设计器中打开它会产生相同的错误:

Compiler error(s) encountered processing expression "ActiveCall". "ActiveCall" is not declared. It may be inaccessible due to its protection level.

通过将原始 XAML 与我的代码生成的 XAML 进行比较,我找到了解决此问题的方法。我必须在 StateMachine 标签之前添加此标签:

<mva:VisualBasic.Settings>
    Assembly references and imported namespaces for internal implementation
</mva:VisualBasic.Settings>

顺便说一句:
标签里面的文字必须一模一样,否则在VS中打开WF会报错:

Failed to create a 'Settings' from the text 'FooBar'

问题:
要在生成的 XAML 中包含此标记,我必须更改我的代码中的哪些内容?

最佳答案

我想我找到了答案。

在调用保存之前我必须使用下面的代码:

VisualBasic.SetSettings(activityBuilder, new VisualBasicSettings());

如果 activityBuilder 是从 DynamicActivity 创建的,那么使用以下代码会更好:

VisualBasic.SetSettings(activityBuilder,
                        VisualBasic.GetSettings(dynamicActivity));

如果不使用,仅扩展方法需要的命名空间不会写入 XAML,并会在加载和执行 XAML 时导致错误。


我在 code project 上总结了我的发现.

关于c# - 如何正确保存 WF4 ActivityBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663896/

相关文章:

c# - 将类对象作为消息发送到 Azure 队列存储

c# - 数据集写入文件

debugging - SharePoint 2013 Visual Studio 工作流未更新

silverlight - 如何托管 Windows Workflow 4 'Workflow Designer"?是否支持 Silverlight 或 Click once?

workflow-foundation - WF项目: express edition

c# - 当您绑定(bind)到 ItemSsource 时内部会发生什么?

c# - 如何使用 iTextSharp 读取 PDF 表单数据?

c# - WF4.5 不编译并行 C# 工作流程

wcf - WF4 WCF 关联和 MessageContract 不起作用

c# - 在 StateMachine 中使用 CallExternalMethodActivity/HandleExternalEventActivity