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

私は自分のマシンから離れているので、このアイデアを確認することはできませんが、デザイナーのコード ファイルにアクセスして最小限のコードを手動で挿入してから、デザイナーに戻ってそこにあるかどうかを確認してみましたか?

デザイナーが XAML または C# を作成しているかどうかは述べていませんが、それが XAML であっても、XML を編集してそれを行うことができるはずです。

于 2009-09-04T20:25:57.833 に答える
0

Visual Studio のバグを発見したようです。ハッキングして機能させることができると確信していますが、それを使用して、ワークフローのビットをクラス ライブラリに保持し、単純なコンソール アプリケーションからそれらを参照することを検討しましたか? はい、これで EXE と DLL が作成されますが、これを行うコストはわずかであり、実際にはレイヤー (UI とビジネス ロジック) をより適切に分離し、将来の再利用を改善できます。

于 2009-09-04T19:35:39.697 に答える
0

プロジェクトをビルドするだけです。コンパイルが成功すると、ツールボックスに表示されます。デザイナーは、最後に成功したビルドのアクティビティのみを読み取ります。

于 2010-01-26T16:27:53.883 に答える