WorkflowService
パラメータに を含むxaml a へのシリアル化に問題がActivityBuilder
ありBody
ます。一部のC# 式がカスタム型を参照するためActivityBuilder
、 に C# 式が含まれており、シリアル化されWorkflowService
た がアクティブになりません。実際のエラーは、「タイプ 'SomeTypeIPassToAnArgument' が定義されていません」です。
MyActivityBuilder
は、要素を含む xaml ファイルから作成されますTextExpression.NamespacesForImplementation
。のシリアル化時にこれが欠落しており、WorkflowService
これが問題の原因のようです。
それ自体をシリアル化するActivityBuilder
と、名前空間が含まれていることがわかりましたが、使用ActivityBuilder.Implementation
は失敗します。残念ながら、WorkflowService
シリアル化するために をビルドするときはActivityBuilder.Implementation
、そのBody
パラメーターとして使用する必要があります。メソッドを使用して、これらが実装に添付されていることを確認しようとしましたTextExpression.SetNamespacesForImplementation
が、役に立ちませんでした。
次のスニペットは、私がやろうとしていることと、失敗している場所を示しています。
var loadedXaml = File.ReadAllText(@"C:\workflow.xaml");
Assert.IsTrue(loadedXaml.Contains("NamespacesForImplementation"));
var xamlReader = new XamlXmlReader(new StringReader(loadedXaml));
var builderReader = ActivityXamlServices.CreateBuilderReader(xamlReader);
var builder = XamlServices.Load(builderReader) as ActivityBuilder;
// namespaces are available in the builder itself
Assert.AreNotEqual(0, TextExpression.GetNamespacesForImplementation(builder).Count);
// when saving, the assert fails because the namespaces aren't serialized
var savedXaml = XamlServices.Save(builder.Implementation);
Assert.IsTrue(savedXaml.Contains("NamespacesForImplementation"));
なぜこれがうまくいかないのか、または私が使用できる別のアプローチがあればそれはうまくいきますか? 最終的に私の目的は、xaml からワークフローを読み込んでWorkflowService
、VirtualPathProvider
.
ありがとう!