2011/06/01

Spring.NET Objects Checker 用來檢查你的 spring-objects.xml 內容是否正確

這幾天花了點時間寫了這個工具,主要原因是自從我在新公司開始接觸 Spring.NET 後,
在於團隊開發後的除錯(Debug)上,有時候會在 Spring.NET 的物件定義 XML 設定檔這
花上不少時間,大概情形如下,

『用了 Spring.NET 的 XML 設定後,衍生的特性是
「建置(Build)成功的定義不一樣了」,
原本的建置成功代表的是「程式中類別、方法的定義,使用端的呼叫都正確」,
現在的建置成功只有代表「程式中類別、方法的定義都合乎語法」,
「使用端的呼叫是否正確?」請執行已建置好的執行檔或網頁,We will see.
這產生了一個新的現象,專案開發中,發生
「建置成功,但不能執行」的機會提高了,變得更容易發生的原因可以很簡單,
例如:
 我寫了某支規格的 Dao.cs, IDao.cs, Domain.cs, Service.cs, IService.cs, (Spring)Objects.xml, Core.csproj, UI.aspx,
建置並執行沒問題後,Commit 到 Subversion 時漏掉了其中一個或以上的檔案(通常是 Core.csproj), 然後繼續做下一支規格。(這代表的是,下一個 Commit 的人要倒霉了,不,也許是下下下一個 Commit 的人)」
至於下一個 Commit 的人為什麼會倒霉,這邊我就不詳述了。

而我對於這個情形的結論是「在還沒有適當的工具可以一次找出 objects.xml 中的錯誤之前,就只能請 Program Analyst 的要求再多一點了』
以上,既然還沒有適當的工具,那麼...就自己寫吧!


程式內容主要是利用 Linq to XML 去分析指定的 (spring-)objects.xml,再將內容中各個被定義在標籤 object 屬性 type 裡的組件(Assembly)資訊,一個一個利用 System.Reflection.Assembly 動態載入到程式中,然後檢查被定義的類別(Class)。

程式目前的進度我只做到(對我自己)夠用的的程度,使用的 XSD 驗證,目前也只用了 spring-objects-1.3.xsd、spring-database-1.3.xsd,如果您的 objects.xml 還有用到其他 namespace ,就要去改程式了。

工具使用說明:
這邊下載了 SpringNetObjectsChecker-1.0.0.zip 並解壓縮後,
(要檢查 .net 4 做的 dll 請下載 SpringNetObjectsChecker_net4-1.0.0.zip)
在「命令提示字元」中輸入格式如下並執行
 SpringNetObjectsChecker.exe 參數1:[Spring Objects Xml 設定檔位置] 參數2:[使用到的組件檔資料夾位置]
如:
 SpringNetObjectsChecker.exe D:\Core\SpringConfig\objects.xml D:\web\Bin

執行完畢,會多出一個 Log 資料夾裡面放著 Log 檔案,
Log 檔內容大概是這樣,
『2011/05/31 19:46:19 Information! Current Directory[D:\SpringNetObjectsChecker]
2011/05/31 19:46:19 Information! CheckObjectsXmlFile([D:\Core\SpringConfig\objects.xml], [D:\web\Bin])
2011/05/31 19:46:19 Information! Checking Parameters ...
2011/05/31 19:46:19 Information! Parameters passed.
2011/05/31 19:46:19 Information! Checking XML Schema ...
2011/05/31 19:46:19 Information! XML Schema passed.
2011/05/31 19:46:19 Information! Checking declared objects ...
2011/05/31 19:46:19 Information! There are 0 Errors and 0 Warnings.
2011/05/31 19:46:19 Information! All objects passed.
2011/05/31 19:46:19 Information! Checking properties of objects ...
2011/05/31 19:46:19 Warning! Skip to check Property[<property name="ConfigSections" value="databaseSettings" xmlns="http://www.springframework.net" />]
...
2011/05/31 19:46:19 Information! There are 0 Errors and 3 Warnings.
2011/05/31 19:46:19 Information! All properties of objects passed.
2011/05/31 19:46:19 Information! Checking the objects that are parent of other objects ...
2011/05/31 19:46:19 Error! Object id[SysSaleMsgMDaoProxy] refferred nonexistent parent object id[TxProxyConfigurationTemplateLozen]
2011/05/31 19:46:19 Information! There are 1 Errors.
2011/05/31 19:46:19 Information! Checking the objects that are referred by properties ...
2011/05/31 19:46:19 Error! Property name[Target] of object id[SysSaleMsgMServiceProxy] refferred nonexistent object id[SysSaleMsgMServiceLozen]
2011/05/31 19:46:19 Information! There are 1 Errors.
2011/05/31 19:46:19 Information! Total 2 Errors and 3 Warnings.

這樣就可以一次看到 objects.xml 中所有的錯誤啦。

程式碼我已上傳到 Google Code,
連結在http://code.google.com/p/spring-net-objects-checker/

沒有留言:

張貼留言