2

我正在尝试完成一些看起来应该非常简单的事情。我有一个状态机工作流控制台应用程序,其中包含一个工作流。我为它创建了一个自定义活动。此活动将永远不会在其他任何地方使用。我只想在我的工作流程中使用此活动,但是:

  1. 它不会出现在工具箱中。
  2. 我无法将它从解决方案资源管理器拖到工作流设计器上。

我绝对不想创建一个单独的状态机工作流活动库,因为那只会让我的解决方案变得混乱。就像我说的,我永远不会在任何其他项目中使用这个活动,所以我想把它限制在这个活动中……但我就是不知道如何把它交给设计师!我要疯了吗!?

这是活动的代码:

public partial class GameSearchActivity: Activity
{
    public GameSearchActivity()
    {
        InitializeComponent();
    }

    public static DependencyProperty QueryProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Query", typeof(string), typeof(GameSearchActivity));
    [Description("Query")]
    [Category("Dependency Properties")]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string Query
    {
        get
        {
            return ((string)(base.GetValue(GameSearchActivity.QueryProperty)));
        }
        set
        {
            base.SetValue(GameSearchActivity.QueryProperty, value);
        }
    }

    public static DependencyProperty ResultsProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Results", typeof(string), typeof(GameSearchActivity));
    [Description("Results")]
    [Category("Dependency Properties")]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public IEnumerable<Game_GamePlatform> Results
    {
        get
        {
            return ((IEnumerable<Game_GamePlatform>)(base.GetValue(GameSearchActivity.ResultsProperty)));
        }
        set
        {
            base.SetValue(GameSearchActivity.ResultsProperty, value);
        }
    }

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
    {
        IDataService ds = executionContext.GetService<IDataService>();
        Results = ds.SearchGames(Query);

        return ActivityExecutionStatus.Closed;
    }
}

谢谢。


编辑:

好的,所以我发现如果我将项目类型从控制台应用程序更改为类库,自定义活动就会出现在工具箱中。然而,这是不可接受的。它需要是控制台/Windows 应用程序。

有人知道解决这个问题的方法吗?

4

3 回答 3

0

您所要做的就是构建项目。如果编译成功,它应该会出现在工具箱中。设计者只读取上次成功构建的活动。

于 2010-01-26T16:27:53.883 回答
0

我离开了我的机器,所以我无法检查这个想法,但是您是否尝试过进入设计器的代码文件并手动插入最小代码,然后返回到设计器中查看它是否存在?

您还没有说您是否让设计器创建 XAML 或 C#,但即使它是 XAML,您也应该能够编辑 XML 来执行此操作。

于 2009-09-04T20:25:57.833 回答
0

您似乎发现了 Visual Studio 中的一个错误。我相信您可以破解它以使其工作,但是,您是否考虑过使用它并将工作流位保留在类库中并从简单的控制台应用程序中引用它们?是的,这会创建一个 EXE 和一个 DLL,但这样做的成本是微不足道的,实际上可以更好地分离您的层(UI 与业务逻辑)并在未来实现更好的重用。

于 2009-09-04T19:35:39.697 回答