外掛檔案大致上是怎麼被啟動的,在這篇文章中,試圖用在 Menu 加上 Button 的方式當作進入點,把整個外掛開起來。
閱讀這篇文章時,你並不需要先閱讀第 (2) ,關於 (2) 的部分只是稍微粗略筆記 Template 製作的過程,這篇文章閱讀的同時,可以直接下載 Visual Studio 的範本檔案,開起來用:https://github.com/hpcslag/sp-template-for-visual-studio
這個是我自己整理的專案範本,也自帶了一個我預設寫的一個 AddIns 最初範本,提供給新手入門使用,但本篇文章並不會使用到這個完美範本,只會使用空範本 (與 SharpDevelop 相同)。
有關於深度的外掛機制檔案,會在下下個章節再詳細討論有關 Sharp Develop 的內部機制。
現在,我們要直接新增一個外掛在 SharpDevelop 中,但有幾件事你需要事先知道:
- 確認你的專案是新增在 src 底下而不是根目錄 (因為是被當作編譯的 bin ,可能會被清掉)
- 必須得引用好正確的 Reference 路徑
- 必須修改編譯的路徑
- 注意,有時候 IDE 不會跟上你的改變,建議每次測試外掛,都用 Rebuild
新增外掛
外掛新增的位置,一定要特別小心位置,一不注意就會選到 SharpDevelop 根目錄的 AddIns 資料夾,請一定要新增在 SharpDevelop/src/AddIns/Misc 底下。
完成新增後,這就是一個空專案了,我們可以隨心所欲,在專案中建立 Win Form 視圖:
這是 Windows Form 的 User Control。 或是也可以新增 WPF 的 User Control。
新增好後的應用程式,並沒有進入點,外怪無法開啟它,所以我們得開始製作外掛進入點:
新增一個 MenuCommand ,這個是用來被觸發 Menu 按鈕事件的 handler class,我們可以把它當作程式的進入點:
這時候,從旁邊的 Reference 新增引用, Browse 那些 dll:
注意,至少要選到 Core 跟 Develop 的 dll ,而且 bin 的那些 dll 是在 第一篇文章 (1) 編譯出來的,如果你還沒有編譯,請回去參考第一章的編譯。
然後,我們要更改 Menu Command 新增出來裡面的程式碼,測試看看按下選單有沒有跳出 Debug 訊息:
意思一下,給個 print 就好了。
接著,要設定最重要的步驟,就是把這個 MenuCommand.cs 當作 handler ,要告訴 SharpDevelop ,哪個按鈕觸發的時候,要進入這個 Class Handler,這就得修改 .addin 這個檔案:
<AddIn name = "ITRI-AddIn-ITRI___AddIn1" description = "*"> <Manifest> <Identity name="ITRI___AddIn1" /> </Manifest> <Runtime> <Import assembly = "ITRI-AddIn.dll"/> </Runtime> <!-- Extend the SharpDevelop AddIn-Tree like this: <Path name = ...> <.../> </Path> --> <Path name = "/SharpDevelop/Workbench/MainMenu/View"> <MenuItem id = "helloworld" label = "測試 Menu Command" class = "ITRI___AddIn1.MenuCommand"/> </Path> </AddIn>
可以看到我在底下新增了一個 path ,其中 name 裡面的屬性參數就是 SharpDevelop 的內部功能路經機制,我要把 Menu 的【測試 Menu Command】 放在 View 底下。
id 隨便取, label 則是顯示的文字, class 是 [namespace].[classname]。
設定好後,還要先設定編譯後的目錄:
編譯出去的目錄,不是放在 src ,是放在根目錄的 AddIns 資料夾的 Misc 底下。
完成後,直接右鍵 -> build 一下,然後執行 SharpDevelop 。
就快好了,現在我們希望它可以直接啟動視圖,顯示最早我們新增的 wpf / win form 的 User Control。
由於視圖機制還是得靠 SharpDevelop 去處理,所以得在專案底下,新增一個 Empty View 的 Item:
這邊出現了一堆引用問題,直接引用 ICsharpCode 參考就可以解決了。
using System; using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; namespace ITRI___AddIn1 { /// <summary> /// Description of MenuCommand /// </summary> public class MenuCommand : AbstractMenuCommand { /// <summary> /// Starts the command /// </summary> public override void Run() { // TODO: Add your code here !!! Console.WriteLine("Test"); //WorkbenchSingleton.Workbench.ShowView(); //menu = new MenuStrip(); //MenuService.AddItemsToMenu(menu.Items, this, "/Workbench/MainMenu"); WorkbenchSingleton.Workbench.ShowView(new Class1()); //顯示剛才的 View 視圖 } } }
完成後,重新 Rebuild 再開啟 IDE ,使用剛才 Menu 的位置,就可以叫出 UserControl 了:
沒有留言:
張貼留言