我目前正在像这样保存我的 .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/