簡體   English   中英

如何在Visual Studio中組織模塊化(C#/ MEF)應用程序以允許調試?

[英]How to organize a modular (C#/MEF) application in Visual Studio to allow debugging?

我正在使用C#和MEF開發模塊化應用程序。 該應用程序應包含

  • 一個主應用程序 ,它是實際的可執行文件,提供核心功能,公開許多接口(擴展點)並使用MEF插入適合這些接口的插件程序集
  • 一組插件 ,這些插件提供適合接口的類,並且可由主應用程序使用

主應用程序可以全部運行,也可以導入一個或多個插件。 對於基於模塊化MEF的應用程序,這應該是一個相當標准的體系結構。 初步測試表明,這似乎普遍有效。 如果我將主應用程序以及一個或多個插件程序集部署到一個文件夾中,則一切正常。

但是,我正在為如何組織Visual Studio解決方案而苦苦掙扎。 我最初的方法是主應用程序以及每個插件都是解決方案中的獨立項目。 主要應用程序是一個exe項目,而插件是dll項目。 插件項目依賴於主項目,因為它們正在實現接口並使用在主應用程序中定義的類(我本可以創建一個通用的lib項目來執行此操作,但似乎沒有任何好處)。

這樣,我可以很好地啟動和調試主應用程序(沒有插件)。

但是如何組織解決方案,以便我可以使用一個,多個或所有插件調試主應用程序? 當前的方法是將每個插件構建到自己的文件夾中(通常很好),然后將主應用程序復制到其中的每個應用程序中(不太理想)。 我可能會配置一個單獨的插件項目,以在其輸出文件夾中啟動主應用程序,但是我不知道如何對多個插件執行此操作,或者如果不應將主應用程序復制到該插件中,該怎么做每個插件輸出文件夾。

任何提示或最佳做法將不勝感激。 我正在使用Visual Studio 2015-如果有什么不同。

插件項目依賴於主項目,因為它們正在實現接口並使用在主應用程序中定義的類(我本可以創建一個通用的lib項目來執行此操作,但似乎沒有任何好處)。

它有很多好處,有幾個:

  • 如果您有多個項目都使用相同的類/函數,則將它們駐留在單獨的公共項目中是很有意義的。 甚至可能還有另一個單獨的項目僅用於接口。 它使您可以更輕松地掌握內容,查看具有主應用程序的解決方案,一些具有常用功能的dll,一些插件
  • 假設您曾經必須添加另一個主應用程序,那么該應用程序也可以利用通用dll,而不必引用第一個主應用程序
  • 您最終不會將主應用程序復制到其他項目的輸出目錄x次,因為它們依賴於該目錄
  • (最后對我來說)其他項目將exe項目作為依賴項而不是dll項目似乎有點奇怪。 就像一個插件真的依賴於它所加載的主應用程序對我來說真的很奇怪。雖然可能只是我一個人-但我認為這也是您必須在第一個問題中提出其余問題的原因之一地點。

但是如何組織解決方案,以便我可以使用一個,多個或所有插件調試主應用程序?

通常,您在啟動時告訴主應用程序要加載哪些插件。 有多種方法可以執行此操作:讀取包含插件名稱的文件,掃描已知目錄中的插件,以及兩者的結合。 所有都支持或相對容易使用MEF實施。 例如,對於我們擁有的一個大型C#應用程序,所有插件都被復制到bin \\ Plugins之類的文件中。 當應用程序啟動時,它將在bin \\ Plugins中查找dll,根據包含正則表達式的文本文件過濾列表,然后從過濾后的列表中加載插件。 將應用程序發送給客戶時,他們可以獲得全部或僅一些插件。 開發時,我們使用文本文件來減少應用程序的加載時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM