簡體   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