網友saintchou問了一個問題,他的VS2005 SP1網站發行功能選項跟KB-ASP.NET 2.0 網站部署的變革一文所說的不同(該文留言中有選項畫面圖檔連結),有了圖,答案揭曉: saintchou使用的Web Application Project,與文中討論部署有點棘手的Web Site Project是兩種不同專案類型,發佈網站的選項因此不同。

為什麼Visual Studio中會冒出兩種網站專案類型? 這問題還挺有趣的,且扯到一點歷史,索性再做點補充。

詳細的故事源由在KB-ASP.NET 2.0 網站部署的變革文章-ASP.NET 2.0專案部署問題研究兩篇文章裡提到蠻多的,這裡再強調一下如何在Visual Studio 2005 SP1/Visual Studio 2008裡建立及區別Web Site Project與Web Applicatoin Project。

VS2005在一開始時只有Web Site Project模式(Code-Beside),雖然它有架構簡化、修改更新簡便等特性,但不少開發者適應不良,還是懷念ASP.NET 1.1那種需要先Build DLL才能執行的模式,於是微軟先推出了需要額外安裝的Web Application Project套件,讓開發者可以在VS2005中繼續用ASP.NET 1.1的方式寫網站。等到VS2005 SP1推出時,便將Web Application Project功能改為內建,但對於來不及參與這段過去的人來說,Visual Studio 2005裡"斯斯網站有兩種"變成一件奧妙的事。(Visual Studio 2008裡也同時支援這兩種網站專案)

Web Site Project的建立與開啟方式與Web Application Project不同,Web Site Project要由File/New/Web Site來新增,Web Application Project則是要由File/New/Project,再選擇ASP.NET Web Application專案類型(畫面範例看這裡)。

兩種Web Model要挑哪一種各憑所好(MSDN裡有份二者的比較,還包含了特性對照表,可以做為參考),開發時明確知道你採用的是哪一種專案類型即可。

PS: 我個人偏好Web Site模式,在測試開發階段只要改.cs就可以直接看結果,只要Copy檔案就能執行的特性也很方便;至於要部署到正式環境時,則可借助Web Deployment Project將程式碼預先編譯成DLL,避免原始程式碼外洩的疑慮。


Comments

# by surrounding

請問一下若建立了一個Web Application Project 本人知道把整個Project放上伺服器可行 但若要避免原始程式碼外洩,當要把它放上伺服器,究竟要放什麼檔才對呢

# by Jeffrey

to surrounding, 不管是Web Site Project或Web Application Project,都能做到只將bin/*.dll及各網頁的.aspx(不含.cs)複製到伺服器就可以執行。可以善用Visual Studio內建的部署功能: http://msdn.microsoft.com/zh-tw/library/dd394698.aspx

# by James

請問Web Application的主要特性是否只是強迫一定要編譯成DLL才能執行程式? 而Web Site模式只要借助Web Deployment Project將程式碼預先編譯成DLL,也可以滿足這個特性?

# by Jeffrey

to James, 應該這麼說,由於.NET是編譯式的語言(非直譯式),所以程式都需要編譯過才能執行,包含ASP.NET Web Application也是。 事實上,Web Site Project即使沒有使用Web Delpoyment Project,**也一樣會先編譯成DLL才執行**,只是編譯時機是發生在使用者存取網站時,而DLL的存放位置是在暫存目錄區,這些機制都在背後被做掉。加入Web Deployment Project後,只是把編譯時機提早到部署之前,並不是原本不編譯,加入後才編譯。 希望這樣的說明夠清楚。

Post a comment