参照项目内活动加载并执行XAML

参照项目内活动加载并执行XAML,xaml,workflow,workflow-foundation,workflow-foundation-4,Xaml,Workflow,Workflow Foundation,Workflow Foundation 4,我做了一个活动库项目。接下来,我在项目中创建了一些工作流,主要是作为输入和输出参数的演示。我在工具箱中将它们视为可重用组件(活动),并在一些流程图活动中使用了一些组件。这以编译的方式工作得很好。但是,当从XAML加载和执行工作流时,当涉及到从我的项目中引用活动时,它会失败 从XAML加载和执行工作流时,为了重用同一项目中的活动,需要做些什么?我怀疑您的问题在于,创建活动时,xmlns:local属性不包括程序集名称,而只包括命名空间名称。这意味着,当加载XAML文件时,运行时会假定命名空间位于当

我做了一个活动库项目。接下来,我在项目中创建了一些工作流,主要是作为输入和输出参数的演示。我在工具箱中将它们视为可重用组件(活动),并在一些流程图活动中使用了一些组件。这以编译的方式工作得很好。但是,当从XAML加载和执行工作流时,当涉及到从我的项目中引用活动时,它会失败


从XAML加载和执行工作流时,为了重用同一项目中的活动,需要做些什么?

我怀疑您的问题在于,创建活动时,xmlns:local属性不包括程序集名称,而只包括命名空间名称。这意味着,当加载XAML文件时,运行时会假定命名空间位于当前执行的程序集中。当您从应用程序引用活动库时,这是一个错误的假设

您有两个选项来解决此问题

1) 您可以手动将“;assembly=MyActivityLibrary”附加到xmlns:local属性(位于XAML文件的顶部)。这很简单,但是如果您曾经在VisualStudio中修改过XAML,那么您必须记住每次都要重做更改


2) 调用XamlServices.Load时,可以传递第二个XamlXmlReaderSettings类型的参数,并将LocalAssembly属性指定为活动库程序集。这将是更稳定的方法。当您

谢谢时,不需要手动编辑XAML文件。我想我现在明白了。您是否在解释,为了引用自定义活动,它们必须包含在程序集中,即使是动态加载和编译XAML也是如此?我们希望避免部署除开箱即用组件以外的任何组件。听起来我们至少需要将自定义活动放在程序集中,并且在加载和编译XAML时,这些活动必须在当前流程中可用。听起来正确吗?在我明确回答之前,让我确定我理解你的情况。您有一些自定义活动要存储在未编译的XAML中。您还需要将一些工作流存储在未编译的XAML中。您希望能够在运行时加载/编译自定义工作流(反过来引用自定义活动),而不需要标准WF工作流之外的任何程序集。这一切都正确吗?看看下面的例子,您似乎无法在XAML文件的xmlns中引用另一个XAML文件。有鉴于此,我认为你在顶部评论中的方向将是最好的选择。可能有一种方法可以利用事件来动态加载活动,但如果可能的话,肯定需要一些时间和精力才能弄清楚。