打造MonoDevelop For Windows綠色版(測試)

來源:互聯網
上載者:User

隨著Mono項目的成熟,MonoDevelop這一Mono平台上的首選開發工具也開始了它的跨平台計劃,按計劃,MonoDevelo在2.2版本將完全實現在*Unix,Windows,Mac系統上運行,同樣的,今日,官方也推出了關於Mac和Windows的Preview版本,windows版的為:http://monodevelop.com/Download/Windows_Preview,它建立在Microsoft .Net Framework3.5的基礎上,同時需要Gtk#的支援.目前Monodevelop的windows版還有一些問題,不過這已經讓人很振奮了,畢竟,windows上又多了一個免費的完整的.net平台和開發環境.

將MonoDevelop做成綠色版的首要前提是,你的系統上裝了.Net Framework3.5,當然,向我們這樣的.net開發人員,這點自然不是問題,那麼關鍵在於Gtk#的支援了,到官方下載安裝檔案,解開之後可以得到Gtk#的runtime,看起來如:

這其中也包含了Gtk+的運行環境,只需要在系統Path中加入bin目錄的路徑,即可實現對所有gtk+/Gtk#程式的運行支援.這樣一來,我們算是給系統Gtk#的支援了.然後我們下載MonoDevelop的msi檔案,解開之後可以看到結構,如:

不錯,只有2個目錄,分別是程式和外掛程式的目錄,這時候我們進到bin目錄,並沒有發現主程式執行程式,想來確實奇怪,為何直接解開會不見了這個檔案,不過這不是問題,我們可以考慮提取安裝後的執行檔案或者自己編譯一個主程式,這個主程式也只是一個簡單的入口,通過查看源碼,可以得到主程式的源碼為:
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using Mono.Addins;
using MonoDevelop.Core;
using MonoDevelop.Ide.Gui;

namespace MonoDevelopRunner {
    class Program {
        static int Main(string[] args) {
            bool flag = false;
            do {
                try {
                    Runtime.SetProcessName("monodevelop");
                    IdeStartup startup = new IdeStartup();
                    return startup.Run(args);
                } catch (Exception exception) {
                    if (!flag) {
                        LoggingService.LogWarning("MonoDevelop failed to start. Rebuilding addins registry.");
                        AddinManager.Registry.Rebuild(new ConsoleProgressStatus(true));
                        LoggingService.LogInfo("Addin registry rebuilt. Restarting MonoDevelop.");
                        flag = true;
                    } else {
                        LoggingService.LogFatalError("MonoDevelop failed to start. Some of the assemblies required to run MonoDevelop (for example gtk-sharp, gnome-sharp or gtkhtml-sharp) may not be properly installed in the GAC.", exception);
                        flag = false;
                    }
                } finally {
                    Runtime.Shutdown();
                }
            }
            while (flag);
            return -1;
        }
    }
}

 

編譯這個程式,就可以作為Monodevelop的主程式了.

將編譯或者提取的主程式放入bin目錄,然而這時候並不能執行主程式,如果查看錯誤資訊,會發現系統提示缺少了gtksharp的支援檔案,最簡單的方式,將gtk#的支援dllcopy到bin目錄中,所需的檔案有:

這些檔案都可以在gtk#的lib,lib/gtk-sharp-2.0,lib/Mono.Posix等目錄找到.將這些檔案也copy到bin目錄,再次執行主程式,發現已經可以運行了,進去測試測試,卻發現在開啟建立項目的時候會出現系統異常,提示pango-sharp無法載入,可是我們明明已經把該dll放入bin檔案夾了,為何呢?經過尋找,終於發現,出現異常的程式集為libstetic,該程式集會顯示載入pango-sharp2.8.0的程式集,但是,我們下載最新的Gtk#提供版本為2.14.0,正是這樣才導致了載入錯誤,因此,我們需要將libstetic的源碼checkout出來,修改該部分的配置,重新編譯即可(文章下方將提供重新編輯的程式集).修改過該libstetic之後,終於沒有異常了,

接下來我們測試下建立一個Gtk#程式,發現到了版本支援的時候Gtk#的版本為空白,經過檢查,這正是我們不是使用gtk#的安裝包,而是綠色包的緣故,導致gtk#支援程式集未到gac註冊,而monodevelop檢查gtk#版本會只檢查gac的版本,從而導致無法得到正確的版本號碼,要解決這個問題,我們需要修改註冊表,添加缺失的資訊,假如gtk#運行庫所在的目錄為E:\gtk#,那麼可以使用如下註冊表檔案來進行修改,如果在其他目錄,則只需要修改路徑:
 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Novell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Novell\GtkSharp]

[HKEY_LOCAL_MACHINE\SOFTWARE\Novell\GtkSharp\InstallFolder]
@="E:\\gtk#\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Novell\GtkSharp\Version]
@="2.12.9"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\GtkSharp]
@="E:\\gtk#\\lib\\gtk-sharp-2.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\MonoCairo]
@="E:\\gtk#\\lib\\Mono.Cairo"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\MonoPosix]
@="E:\\gtk#\\lib\\Mono.Posix"

匯入該檔案,再次建立Gtk#程式,發現一切正常,至此,一個綠色的Monodevelop程式就建立成功,在不同平台上,只需要修改path和註冊表中gtk#路徑就可做到直接執行Monodevelop.

文章最後提供重新編譯的libstetic程式集
點擊下載此檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.