[.Net Resource]Mono Migration Analyzer (MoMA)

[.Net Resource]Mono Migration Analyzer (MoMA)

Mono Migration Analyzer (MoMA)工具主要功能為偵測.NET應用程式是否可以被移轉到Mono上面,可幫助我們找到應用程式中有用到的平台叫用或是Mono尚未支援的部分。

 

如何使用

Step1.歡迎畫面,按下[Next]繼續。

image

 

Step2.加入要偵測的組件,選取要測試的Mono版本,按下[Next]繼續。

image

 

Step3.該頁面會顯示分析完的結果,若有錯誤可按下下方的View Detail Report超連結觀看錯誤報表,或按下[Next]繼續。

image 

image

 

Step4.該頁面能將看不懂的錯誤訊息反饋,可向Mono團隊尋求幫助,或按下[Next]繼續。

image

 

Step5.按下[Close]關閉。

image

 

影響移轉的四大問題

MoMA會偵測到的主要有下列四種問題 :

  1. Missing Methods
  2. MonoTodo
  3. NotImplementedException
  4. P/Invokes

 

Missing Methods

該問題是因為使用的方法在Mono中尚未實作。依照編譯器的不同可能會看到不同的錯誤訊息,像是用Mono編譯的話,在編譯時就會報錯,可看到下列的訊息:

myfile.cs(22,16): error CS0117: 'xxxxxxxxxxxxxxxxx' does not contain a definition for 'xxxxxxxxxxxxxxx'

 

而如果用微軟編譯器編輯的話,則必須執行到該方法處才會跳出MissingMethodException的例外:

System.MissingMethodException: Method not found: xxxxxxxxxxxxxxxxxxx

 

MonoTodo

該問題是因為應用程式中存在標記有MonoTodo的方法。這標記是用來提醒開發人員尚須處理的地方,通常這代表著方法尚未實做完全,或是實做完後開發者忘了將該標記移除。

 

NotImplementedException

該問題是因為應用程式中存在會丟出NotImplementedException的方法。

 

P/Invokes

該問題是因為應用程式中存在著平台叫用。平台叫用通常是用來呼叫非託管的方法,尤其是平台本身提供的方法。

 

命令列執行

MoMa從1.9版開始就已支援命令列執行的功能。

若要用命令列設定要偵測的組件並開啟MoMa,可以像下面這樣:

 

若要用設定加入多個要偵測的組件並開啟MoMa,可以像下面這樣:

 

若不想帶出MoMa介面,可透過--nogui設定並指派組件的位置,像是:

 

執行完後,在命令提示字元看不到任何訊息,須自行開啟報表查看,其報表會存放在MoMa目錄下的Reports目錄內。若要自行指定報表位置,可透過--out來設定,並指派輸出的報表檔位置,像是:

 

Link