繁体   English   中英

在Windows Workflow Foundation中创建自定义活动设计而不参考Design DLL

[英]Creating custom activity design without reference to Design DLL in Windows Workflow Foundation

我正在将Windows Workflow Foundation自定义活动一起使用 ,并且我想在我的工作流中为这些活动创建自定义设计

我可以进行设计项目,也可以进行设计师xaml。 如果我直接在Workflow项目中引用Design项目那么我也可以在工作流中看到针对他们的自定义设计。

这是我不希望做的事情,因为不应将Designer DLL部署到生产环境中。 我只想在Visual Studio工作流编辑器中进行自定义设计。

通过添加以下内容,我可以使工作正常进行:

[Designer("namespace,dll")]
public class CustomActivity : NativeActivity<string>

然后将dll复制到visual studio路径。 这又是我不希望做的事情,因为每个开发人员都应该这样做并进行构建,以便将dll复制到某个固定的Visual Studio路径中不是很好。

我使用了这两个示例,但是似乎这两个示例都直接引用了DLL:

我认为Visual Studio / Workflow Foundation会以某种方式支持这种功能。

您有任何解决方法的想法吗? 谢谢!

Designer属性(使用“魔术”字符串)不是很可靠。 如果更改类名或名称空间,则不会出现编译错误。 使用IRegisterMetadata实现还有另一种(更好的恕我直言)方法:

  1. 您的设计程序集必须引用您的活动程序集,但这通常是无法避免的。
  2. 将局部类(.cs)添加到XAML设计器
  3. 此类必须从System.Activities.Presentation.Metadata.IRegisterMetadata继承。 该接口仅定义一种要实现的方法。

这是一个实现示例:

public void Register()
{
    AttributeTableBuilder builder = new AttributeTableBuilder();
    builder.AddCustomAttributes(
        typeof(MyActivity),
        new DesignerAttribute(typeof(MyActivityDesigner)));
    MetadataStore.AddAttributeTable(builder.CreateTable());
}

接下来,您需要在Visual Studio中使用自定义设计器。 Visual Studio具有严格的规则来自动加载设计器程序集。 你需要:

  1. 设计器项目的名称必须与活动项目的名称相同,并在末尾添加“ .Design”。 例:
    • 活动项目:MyApp.Activities.dll
    • 设计器项目:MyApp.Activities.Design.dll
  2. .Design dll必须与活动dll位于同一目录中。 您可以在设计器项目中通过生成后事件来自动执行此操作。

重要编辑:

我现在看到您的链接已经显示了此方法,但是您说它直接引用了DLL。 是的,DESIGN DLL引用了ACTIVITY DLL。 但是您却提出了相反的要求:活动dll不应引用设计dll。 使用IRegisterMetadata方法,您的DESIGN dll可以引用ACTIVITY dll,这不是问题:您可以从已发布的程序包中删除设计dll,活动dll可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM