|
不管是不是有人會(huì)說(shuō)老趙是“學(xué)術(shù)派”,“學(xué)術(shù)派”是不是適合“做項(xiàng)目”,我還是要強(qiáng)調(diào)事物的“概念”和描述一個(gè)問(wèn)題的嚴(yán)謹(jǐn)性。我不認(rèn)為在面試時(shí)回答“我都是在做實(shí)際項(xiàng)目,但是對(duì)于概念都不太關(guān)心”的人真有能力把項(xiàng)目做好。老趙覺(jué)得將一些事物的概念理清之后,有些推論自然而然就得出了,想要“誤解”也很難。例如:“HTTP是無(wú)狀態(tài)的 => 那么服務(wù)器端如果要知道當(dāng)前請(qǐng)求用了哪個(gè)Session空間就要客戶端告知了 => 客戶端存儲(chǔ)?那么SessionID應(yīng)該是放在Cookie里的 => 禁用了Cookie還能不能用Session?除非有其他傳遞SessionID的方式,比如URL,否則就不能用”。數(shù)學(xué)是最為嚴(yán)謹(jǐn)?shù)目茖W(xué),各種定理和推論也全部是靠最基本的公理得出的——當(dāng)然知道了公理能不能推出定理,這也需要相當(dāng)?shù)乃剑虼宋覀円残枰^續(xù)學(xué)習(xí),鍛煉這種“推理”的“思維能力”。所以老趙也不相信號(hào)稱“做項(xiàng)目不需要懂?dāng)?shù)據(jù)結(jié)構(gòu)”的朋友能夠有較好的編程能力,能夠應(yīng)對(duì)“只有CURD邏輯”以外的應(yīng)用程序……不多說(shuō)了,進(jìn)入我們的正題。
本來(lái)今天是在寫一篇關(guān)于LINQ的文章,不過(guò)寫著寫著忽然覺(jué)得有些找不著北的感覺(jué),似乎有點(diǎn)過(guò)于發(fā)散了?于是來(lái)博客園逛了一下,正好發(fā)現(xiàn)有朋友發(fā)了一篇文章《.NET面試題,看看你的水平》,于是就在這篇文章里和目前正紅火的小包子同學(xué)為某個(gè)問(wèn)題進(jìn)行了一番爭(zhēng)論。而在吵吵鬧鬧的過(guò)程中看到這么一句話“pdb文件需要放在Debug目錄下才有效果”,忽然覺(jué)得有個(gè)話題值得一說(shuō):“開發(fā)環(huán)境與運(yùn)行環(huán)境”。回想起平時(shí)被問(wèn)到的問(wèn)題,發(fā)現(xiàn)有不少朋友對(duì)于開發(fā)環(huán)境和運(yùn)行環(huán)境并不是分的非常清楚。那么就讓我們從標(biāo)題中的問(wèn)題開始:“csproj文件究竟是做什么用的”。
csproj文件大家應(yīng)該不會(huì)陌生,那就是C#項(xiàng)目文件的擴(kuò)展名,它是“C Sharp Project”的縮寫。那么它究竟是給誰(shuí)用的呢?那是給開發(fā)工具用的,例如我們?cè)谑煜げ贿^(guò)的Visual Studio,以及大家可以沒(méi)有接觸過(guò),但是應(yīng)該都聽說(shuō)過(guò)的MSBuild.exe。Visual Studio會(huì)根據(jù)csproj里的XML定義來(lái)管理項(xiàng)目文件以及相關(guān)其他一些種類非常豐富的數(shù)據(jù)及操作,MSBuild也會(huì)根據(jù)csproj文件來(lái)得知編譯這個(gè)項(xiàng)目需要有哪些依賴,默認(rèn)輸出路徑,Pre-Build和Post-Build需要哪些操作等等。Visual Studio和MSBuild都是開發(fā)工具,這就是csproj存在的唯一意義:為“開發(fā)環(huán)境”提供信息。而到了運(yùn)行環(huán)境中,根本不會(huì)有人(操作系統(tǒng)?)關(guān)心所謂的csproj文件——也就是“程序是哪里來(lái)的”。
如果是個(gè)可執(zhí)行程序,操作系統(tǒng)需要的只是exe,dll,甚至是配置文件或資源文件,而并非在開發(fā)中舉足輕重的csproj,sln,dbproj等文件。而像IIS這樣的運(yùn)行環(huán)境,更加不會(huì)去關(guān)注csproj的影子:“csproj是什么?”IIS輕蔑地說(shuō),“我只聽web.config的說(shuō)法”。在運(yùn)行環(huán)境中,csproj的輝煌不在——這是自然,你有辦法向我們的IIS證明它使用的dll在開發(fā)期是由csproj,sln等文件來(lái)“統(tǒng)領(lǐng)”的嗎?現(xiàn)在說(shuō)到之前提到的“pdb文件需要放在Debug目錄下才有效果”,其實(shí)不然。Debug目錄只是VS的模板所“默認(rèn)存在”的編譯規(guī)則所生成的目錄而已,我們?cè)谡{(diào)試時(shí)使用pdb文件完全可以由VS指定pdb文件存在的目錄——甚至我們根本不需要VS也能使用pdb文件。
說(shuō)到了“模板”,這其實(shí)又是“開發(fā)環(huán)境”的概念。我們?cè)赩S中選擇New Item或New Project時(shí),可以在談出窗口的左邊找到模板的分類,而又邊則是一堆可用的模板。這些模板是哪來(lái)的呢?自然是人為生成給VS用的,您不妨看看自己My Documents/Visual Studio 2008/Templates目錄下是否存在一些zip文件,那就是存放“My Templates”的壓縮包,感興趣的朋友可以學(xué)習(xí)一下如何建立一個(gè)模板。而在“運(yùn)行環(huán)境”下,更不會(huì)知道開發(fā)中用了什么模板。不知您是否提過(guò)這樣的問(wèn)題:“為什么Web Site中無(wú)法使用ASP.NET AJAX,而Web Application就可以?”現(xiàn)在您應(yīng)該已經(jīng)知道了,運(yùn)行時(shí)期的問(wèn)題和Web Site、Web Application與否沒(méi)有任何關(guān)系。那么是如何產(chǎn)生這個(gè)問(wèn)題的呢?看看您的Web.config?看看頁(yè)面上提示了什么信息?用Fiddler看看請(qǐng)求的輸出是什么?其實(shí)在很多時(shí)候“排錯(cuò)”并沒(méi)有什么妙法,唯“仔細(xì)”二字。
而且事實(shí)上,“模板”在開發(fā)環(huán)境中的“地位”比csproj文件都要低,因?yàn)橹灰ㄟ^(guò)模板創(chuàng)建好內(nèi)容之后,就無(wú)法說(shuō)明結(jié)果和自己有什么聯(lián)系了。例如我們使用模板創(chuàng)建一個(gè)AjaxControlToolkit的Extender,其中會(huì)生成一個(gè).cs,一個(gè).designer.cs和一個(gè)js文件——呵呵,誰(shuí)還能證明這三個(gè)文件不是我們手動(dòng)創(chuàng)建的呢?這就是“開發(fā)環(huán)境”,一切都是為了開發(fā)效率的提高,一切都是為了能夠最終產(chǎn)生一個(gè)可執(zhí)行的二進(jìn)制文件。而在開發(fā)環(huán)境的最后一個(gè)成員“編譯器”工作完成之后,所有開發(fā)工具便默默地退居二線。在產(chǎn)品環(huán)境的舞臺(tái)上,最耀眼的一定不是我們的開發(fā)工具。
這就是“開發(fā)環(huán)境”與“運(yùn)行環(huán)境”的宿命。
NET技術(shù):概念,依舊是概念……csproj文件是做什么用的?,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。