3

我目前正在保存我的 .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 中包含此标记?

4

1 回答 1

1

我想我找到了答案。

在调用之前我必须使用以下代码Save

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

如果activityBuilder是从 a 创建的,DynamicActivity最好使用以下代码:

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

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


我总结了我对代码项目的发现。

于 2012-07-26T09:44:34.010 回答