先來個圖:
一、簡介
這個工具自動將VC7工程轉換回VC6工程,換言之,就是將.sln/.vcproj這兩個檔案轉換到.dsw/.dsp檔案。
注意:本轉換器在轉換期間只是建立(或覆蓋).dsw/.dsp檔案,並沒有改變任何原始碼。
二、由來
首先當然是MS並沒有提供這樣的工具,MS在出售開發工具時並沒有提供工程回退的轉換功能使你感到很傷腦筋,甚至開始憎恨MS。
沒有這樣的工具,雖然你可以通過重建工程來湊合,但浪費時間並容易帶來錯誤。事實上,在如下情形時這個工具是很有用的:
有人給你VC7工程,但你只安裝了VC6
你將工程從VC6升級到VC7,在你的目錄下同時存在.dsw/.dsp和.sln/.vcproj檔案,並且你希望保持這幾個檔案的同步,使你在不需要使用兩個版本VC++的情況下任何時候都可以開啟這個工程開始工作。
提供兩個版本的工程(例如你在CodeProject中共用你的代碼時),而不用擔心讀者使用的是哪個版本的開發工具。
三、如何使用
命令列形式:
prjconverter <solutionname (full filepath)>[.sln]
例如:
prjconverter c:/tmp/betterxml/betterxml.sln
可以在命令列鍵入prjconverter.exe擷取更多資訊
四、轉換了什麼
簡單的幾步就可以清楚這是如何工作的,開啟.sln解決方案檔案並轉換到.dsw檔案格式,包括所有的工程定義,依存資訊和原始碼控制標記。
然後,所有.vcproj工程檔案轉換為.dsp檔案,我使用MSXML來解析.vcproj檔案格式,另外建立元模型( meta-model),然後將所有XML內容轉換到標準的.dsp符號行。
當然,我們要小心處理項目中的配置(debug,release,...),還有自訂的配置。
五、技術細節
代碼中slnprocess.cpp完成從.sln到.dsw的轉換。vcprojprocess.cpp完成從.vcproj到.dsp的轉換。
vcprojconfiguration.cpp包含了所有工程元模型(meta-model)(即所有工程設定選項)。在VC7中元模型是可程式化的。具體可以查看此連結http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcext/html/vcoriVisualCExtensibilityObjectModel.asp ,事實上vcprojconfiguration.cpp就是展現了這種元模型(meta-model,就像MS的內部代碼)
六、申明
這個工具在發布之前已經經過廣泛的測試(MFC/COM/ATL/控制台程式,make檔案,...),雖然我希望知道是否有可以改進的地方,但我必須清楚地申明如果你的工程被該工具破壞並不是我的錯。
下載工程轉換工具 下載原始碼