2

カスタム アクティビティでWindows Workflow Foundationを使用しています。ワークフローでこれらのアクティビティのカスタム デザインを作成したいと考えています。

デザイン プロジェクトとデザイナー xaml を作成できます。また、ワークフロー プロジェクトでデザイン プロジェクトを直接参照すると、ワークフローでそれらのカスタム デザインを確認できます。

Designer DLL は実稼働環境にデプロイされるべきではないため、これは私がやりたくないことです。Visual Studio ワークフロー エディターでカスタム デザインのみを使用したいと考えています。

以下を追加することで、物事を機能させることができました:

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

この後、dllをビジュアルスタジオパスにコピーします。これもやりたくないことです。なぜなら、すべての開発者がこれを行う必要があり、ビルドを作成して dll をいくつかの固定ビジュアル スタジオ パスにコピーするのはあまり良くないからです。

以下の 2 つの例を使用しましたが、どちらも DLL を直接参照しているようです。

この種の機能は、Visual Studio/Workflow Foundation によって何らかの形でサポートされると思います。

これを解決する方法はありますか?ありがとう!

4

1 に答える 1

0

属性 (「魔法のDesigner」文字列を使用) はあまり信頼できるものではありません。クラス名または名前空間を変更しても、コンパイル エラーは発生しません。実装を使用してそれを行う別の(より良い私見)方法がありますIRegisterMetadata

  1. Designアセンブリは Activity アセンブリを参照する必要がありますが、これは通常避けられません。
  2. 部分クラス (.cs) を XAML デザイナーに追加する
  3. このクラスは から継承する必要がありSystem.Activities.Presentation.Metadata.IRegisterMetadataます。このインターフェイスは、実装するメソッドを 1 つだけ定義します。

実装サンプルは次のとおりです。

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 は正常に動作します。

于 2014-02-28T16:06:26.383 に答える