不消IDE寫C#的Hello World的辦法。本站提示廣大學習愛好者:(不消IDE寫C#的Hello World的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是不消IDE寫C#的Hello World的辦法正文
用Visual Studio等IDE寫C#的Hello World異常簡略,但離開了IDE你能不克不及打印出Hello World呢?這不是說任務時離開IDE,而是進修一下CLR的履行模子.
Hello World
新建一個記事本,輸出以下代碼,另存為HelloWorld.txt.
using System; namespaceHelloWorld { classProgram { static voidMain(string[] args) { Console.WriteLine("Hello World!"); Console.ReadKey(); } } }
翻開Visual Studio 2008(2005,2010) 敕令提醒法式
卻換到HelloWorld.txt的目次
運轉敕令:csc /out:Hello.exe HelloWorld.txt
如有意外,將會編譯出Hello.exe,能打印出Hello World.
CLR履行模子-編譯期
CLR法式的履行進程年夜致分為兩步,編譯期和運轉期,編譯期進程年夜致以下圖:
個中編譯期邏輯上也可分為兩步:
CLR(C#)編譯器接收源代碼文件,並編譯為托管模塊.托管模塊包含IL代碼,元數據,CLR優等構成部門.下面的例子中就是將HelloWorld.txt編譯成托管模塊.
普通法式集都邑包括許多源代碼文件(這裡只要HelloWorld.txt)和資本文件,第二步就是把各個源代碼文件和資本文件對應編譯成果歸並成法式集.
履行下面兩步便可以獲得一個XX.dll或XX.exe的法式集.就像下面的Hello.exe.
編譯器若何曉得要編譯成托管模塊照樣資本文件?實際上是必需明白告知編譯器每一個文件的怎樣編譯,這個對應Visual Studio的文件屬性的生成操作.
右擊任何Visual Studio處理資本計劃的文件-->屬性-->生成操作:
指定Class1為嵌入的資本,用ILSpy檢查會發明只是把Class1嵌入到法式集中,稱號為:定名空間.文件名:
你乃至可以將一張圖片設為編譯讓編譯器試圖去編譯它,不外會報錯.
運轉期
下面生成了法式集,法式集內的是IL代碼,它還不是可運轉的代碼.IL是與CPU有關的機械說話.直到法式集被挪用,才會由JIT(Just-in-Time,及時)編譯器編譯為本機代碼(CPU指令).在運轉時,CLR履行以下步調:
◆ 檢討法式集的平安特征;
◆ 在內存平分配空間;
◆ 把法式集中的可履行代碼發送給JIT編譯器,把個中一部門編譯本錢機代碼(CPU指令).
法式集的可履行代碼在須要的時刻由JIT編譯編譯,然後本機代碼(CPU指令)就被緩存以備後來的法式中履行.一旦運用法式終止,編譯好的本機代碼也會被拋棄.
例如假如將下面的代碼改成:
static void Main(string[] args) { Console.WriteLine("Hello"); Console.WriteLine("World!"); Console.ReadKey(); }
第一個WriteLine須要先JIT編譯,再履行.而因為已編譯WriteLine的代碼,所以第二個WriteLine會直接履行內存塊中的代碼,跳過JIT編譯.
因為分派內存,JIT編譯進程等,所以法式會在第一次運轉時形成一些機能喪失,寫ASP.NET時這類感到特變顯著,按了F5會等良久才會顯示首頁.
上面模仿感觸感染這個進程.用一年夜堆類延伸內存分派的時光,參考這個文件HelloWorld.css(博客園不支撐txt格局):
再次運轉敕令:csc /out:Hello.exe HelloWorld.txt,獲得Hello.exe,履行時發明有必定的延遲才會打印出Hello World.
生本錢機代碼
應用.NET供給的NGen.exe,可以將IL代碼編譯本錢機代碼.可以處理下面的成績.NGen.exe有兩個感化:
加速運用法式的啟動速度.由於代碼已編譯為本機代碼,運轉時不須要再花時光編譯
削減運用法式的法式集.假如一個法式聚會會議同時加載多個過程.NGen.exe會將IL編譯本錢機代碼,並保留到一個零丁的文件中.如許便可以經由過程"內存映照"的方法,同時映照到多個過程中,使代碼同享.防止每一個過程一份代碼.
再次運轉Visual Studio 2008(2005,2010) 敕令提醒法式
運轉以下敕令:ngen install Hello.exe:
敕令完成(在我的機械年夜概要10秒閣下,到能再次輸出敕令才完成)後運轉Hello.exe會發明立時就可以打印出Hello World,沒有任何延遲.
關於ASP.NET,Microsoft別的供給了aspnet_compiler.exe,我們可以在ASP.NET法式建一個劇本(.bat)預編譯法式.以下是一個示例(from老趙的法式):
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v / -p .\MyMvcDemo.Web.UI -f -errorstack .\Compliled
PAUSE
關於aspnet_compiler.exe不多引見,感興致的可以本身搜刮相干材料.