asp.net1.1時,web項目可以編譯成一個dll,然後發布該dll和aspx、ascx頁面即可。到了asp.net2.0裡,web項目的編譯則稍有不同。
首先,vs2005裡有兩種類型的web程式:web site和web project。
Web project和原來vs2003裡差不多,可以編譯成一個dll,但是需要安裝一個sp1之後才會有這種類型出現:建立一個project,選擇web..。
這種project產生之後會出現一個.csproj的專案檔;
Vs中看到的項目目錄是xx項目。這種項目可以轉化成下邊的那一種。
而如果安裝了vs2005之後預設的web類型就是web site,這種類型的只是一個檔案夾而已,裡面沒有.csproj檔案,vs中看到的是一個目錄d:\xx\xxx。
這種項目的編譯和發布就和vs2003時有些不同了,它可以使用先行編譯。
先行編譯可以把項目編譯成一些dll,這些dll的名字隨機。諸如“App_Web_4psgfks”之類的一對檔案,編譯之後還是再bin目錄下。在這種情況下如何編譯成一個dll,似乎有一個aspnet_merger的dll可以用。
而aspx頁面的編譯結果也有多種。
1: 如果選擇不可以更新,那麼編譯之後的aspx頁面就成了一個markup的頁面,裡面內容全空,只留下這樣一個字串:This is a marker file generated by the precompilation tool, and should not be deleted!。於此同時bin裡產生一個對應的complied檔案,裡面寫明類的映射。
2: 如果選擇可以更新,那邊編譯之後的aspx頁面保留內容,但是該頁面的第一列則會被改變成這樣:inherits="xx.xxxx, App_Web_4psgfks-"。這表明該後台類在哪一個dll中。
而如果是在vs2005之外,則可以直接調用aspnet_complier.exe完成上述先行編譯功能。該exe位於C:\Windows\Microsoft.NET\Framework\v2.xxxxx\aspnet_compiler.exe。
舉例:
C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_compiler -v 項目名稱 –p 項目目錄 目標目錄 –u
其中-u就是表示是否可以aspx頁面更新的選項。
具體使用參數可以在cmd之後輸入aspnet_compile -?。
============================================
=================================================
這是代碼,可以用來編譯和整合dll的:
"C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe" -f -u -p "D:\MyProgram\WebSite\xxx" -v / "D:\MyProgram\Win\xxxx"
"C:\Program Files\MSBuild\Microsoft\WebDeployment\v8.0\aspnet_merge.exe" "D:\MyProgram\Win\xxxx" -o xxxx.dll
======================
正常情況下,vs2005並沒有aspnet_merge.exe,需要安裝這個才可以:WebDeploymentSetup.msi。
vs2008下就已經有了。