原創|其它|編輯:郝浩|2009-03-09 13:55:30.000|閱讀 327 次
概述:將類型構建到模塊中
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我將給你展示如何將你的包含各種類型的源文件變成可以部署的文件, 讓我們從檢查如下的簡單應用程序開始吧:
public sealed class Program {
public static void Main() {
System.Console.WriteLine("Hi");
}
}
這個應用程序定義一個類型Program, 這個類型只有一個公開靜態的函數Main, 在Main函數里面有另一個類型的引用, 這個類型是System.Console, System.Console是微軟實現的一個類型, 實現這個類型的函數的IL代碼位于MSCorLib.dll文件中, 所以我們的應用程序定義了一個類型, 并使用了另外一個公司的類型.
為了構建這個應用程序樣本, 將前面的代碼放到一個源文件Program.cs中, 然后執行如下的命令:
csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs
這個命令行告訴C#編譯器產生可執行文件Program.exe(/out:Program.exe). 產生的文件類型是Win32控制臺應用程序(/t[arget]:exe).
當C#編譯器處理這個源文件的時候, 看上去代碼引用了System.Console類型的WriteLine函數, 在這點上, 編譯器要確保這個類型存在于某個地方, 這個類型有WriteLine函數, 傳給這個函數的參數與函數期望的參數相匹配, 因為這個類型沒有定義在C#的源文件中, 為了讓C#編譯器高興, 你必須給它一組程序集讓它使用來解決外部類型引用的問題. 在上面的命令行中, 我已經包含了/r[eference]:MSCorLib.dll開關, 它告訴編譯器在由MSCorLib.dll標示的程序集中查找外部類型.
MSCorLib.dll是一個特別的文件, 因為它包含了所有核心類型: Byte, Char, String, Int32和更多的其他類型. 實際上, 這些類型十分常用, 以致于C#編譯器會自動地引用MSCorLib.dll程序集. 換句話說, 下面的命令行(省略了/r開關)回合前面的命令行得到相同的結果:
csc.exe /out:Program.exe /t:exe Program.cs
此外, 因為/out:Program.exe和/t:exe命令行開關也是C#編譯器默認選擇的, 因此下面的命令行也會得到相同的結果:
csc.exe Program.cs
如果由于某種原因, 你不想讓C#編譯器引用MSCorLib.dll程序集, 你可以使用/nostdlib開關. 微軟在構建MSCorLib.dll程序集自身時就使用這個開關. 例如, 當CSC.exe企圖編譯Program.cs文件時, 下面的命令行將產生一個錯誤, 因為System.Console類型是在MSCorLib.dll中定義的:
csc.exe /out:Program.exe /t:exe /nostdlib Program.cs
現在, 讓我更近地看看C#編譯器產生的Program.exe文件, 這個文件到底是什么? 好, 對初學者來說, 它是一個標準的PE(portable executable)文件, 這意味著運行著32位或者64位版本的Windows應該能夠載入這個文件, 并對其做些事情. Windows支持兩類應用程序, 控制臺用戶接口(CUI)的應用程序和圖形用戶接口(GUI)的應用程序. 因為我指定了/t:exe開關, 編譯器產生CUI應用程序. 你可能會使用/t:winexe開關來讓C#編譯器產生GUI應用程序.
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:MSDN