什么是.net 腳本呢?基本上,它就是一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序,從 .dnml 文件( dot net markup language, .net 標(biāo)記語(yǔ)言, 這是我定義的,哈哈)中讀取 xml 文檔。這個(gè)xml文檔包含如下子元素,存儲(chǔ)程序集引用,編寫的代碼所屬的語(yǔ)言以及實(shí)際的要編譯和執(zhí)行的代碼。那個(gè)控制臺(tái)應(yīng)用程序,我稱之為腳本引擎,讀取xml 文本并分析出需要的數(shù)據(jù)。然后它利用csharp, visualbasic, 和 codedom 命名空間中的類編譯代碼并將作為結(jié)果的程序集裝載到內(nèi)存中。教本引擎利用反射機(jī)制執(zhí)行生成的程序集中的入口函數(shù)。當(dāng)用戶關(guān)閉控制臺(tái)窗口時(shí),腳本引擎被關(guān)閉,在內(nèi)存中的程序集將不復(fù)存在,它將被垃圾回收器清理掉。沒(méi)有任何的庫(kù)或可執(zhí)行程序生成。
dot net 標(biāo)記語(yǔ)言 讓我們來(lái)看看.net 標(biāo)記語(yǔ)言是什么模樣的。它其實(shí)非常簡(jiǎn)單。下面就是一個(gè)它的例子。我會(huì)一一說(shuō)明xml 文檔中的每個(gè)元素。
<dnml> <reference assembly="system.windows.forms.dll" /> <language name="c#" /> <scriptcode><![cdata[ using system.windows.forms; public class test { public static void main() { console.writeline("this is a test"); messagebox.show("this is another test"); test2 two = new test2(); two.stuff(); } } public class test2 { public void stuff() { console.writeline("instance call"); } } ]]></scriptcode> </dnml> <span