web工程編譯
❶ VS2005 debug編譯和msbuild編譯 有什麼區別
用aspnet_compiler發布網站在asp.net 2.0模型中,vs2005已經完全脫離了編譯而成為了一個徹底的ide.算是一個不小的改動。其中更是取消了有關Web Application的概念,使得習慣了vs2003的人剛開始的時候會有一些摸不著頭腦。下面簡單說一下我在使用過程中自己總結的,算是一點經驗。
新建web工程並且位置是文件系統的時候,vs2005隻是幫你建好了一個sln文件,這個東西只是指引msbuild 如何進行編譯的,過程是:ide 調用 msbuild ,msbuild解析sln文件,msbuild調用aspnet_compiler.exe進行網站的編譯。所以aspnet_compiler.exe只是負責進行網站的編譯的。
預編譯的概念在 .netframework 1.1 裡面就存在了,vs2003中的預編譯指的是將頁面對應的cs/vb文件與resx文件編譯後統一集成到一個dll中放到bin目錄下,將aspx文件直接拷貝過去。這樣做會留下隱患,因為aspx文件就直接暴露在最後的發行包中,如果完全是codeb-behind模型還好,只能改改界面,如果採用了頁面上的來生成頁面,源代碼就暴露了。針對這些問題,vs2005採用了一種新的模式。
請參看ASP.NET 編譯工具 (Aspnet_compiler.exe) 這篇文章了解對各種文件的處理方式。
IDE發布:
vs2005中選擇 生成-〉發布網站,在對話框中的操作將映射到aspnet_compiler.exe的參數中,可更新的發布對應 -u,其他選項類似,請參考上面的文章了解。
注意:發布時將忽略web.config中的debug參數,統一生成無調試信息的文件。
手工編譯:
簡單說來,如果是無更新發布模式編譯,appcode下面的class編譯成dll放在bin下,頁面內容清空位置不變作佔位用,同時頁面被編譯成一個隨機名稱的dll,增加一個同名.compiled文件到bin目錄下,內容大概如下:
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/Forum/AdminList.aspx" hash="6772609c3" filehash="49154463f1d6738c" flags="110000" assembly="App_Web_hmrycg3w" type="ASP.forum_adminlist_aspx">
<filedeps>
<filedep name="/Controls/footer.ascx" />
<filedep name="/Controls/header.ascx" />
<filedep name="/Forum/AdminList.aspx" />
<filedep name="/Forum/AdminList.aspx.cs" />
<filedep name="/Forum/menu.ascx" />
<filedep name="/Forum/menu.ascx.cs" />
</filedeps>
</preserve>
裡面只是列出了頁面上的customcontrol,這里已經完成了和masterfile的映射。這樣最大限度的保護了頁面的敏感信息,發布過的網站中只能看見一堆文件名了。可更新的發布模式與vs2003類似,頁面就直接拷貝過來不予編譯了。
講了一堆原理,下面說一下aspnet_compiler.exe的調用方法,這是我使用的例子
我的開發目錄是這樣的
Project/
library/
devroot/
pubroot/
proj.sln
使用的命令如下:
aspnet_compiler -v / -p .\devroot -f .\pubroot
分析:
-v / 指明了iis的虛擬目錄
-p .\devroot 表示代碼實際位置
.\pubroot 指明了要發布的位置
-f 表示強制改寫目標位置
你還可以用-u來進行傳統意義上的預編譯,-d來插入編譯符號。
總的來說,aspnet_compile結合msbuild,提供了一個很好的自動化編譯環境,值得研究研究:)
❷ 在用eclipse集成的ant編譯web工程的時候,在編譯到類文件的時候,就會terminated,但是看不到原因
樓上的,WEB工程 和EXE 有毛關系啊?
樓主,你是ant是在那執行的,應該在控制參有輸出啊,
如果是eclipse的話,會出一個藍色的鍵接,點擊的話,可以到build.xml文件中運行出錯的地方。
❸ Eclipse無法自動編譯出class文件
有時候用Eclipse或者MyEclipse的時候 發現不能自動編譯 web工程下面缺少class文件!
第一個可能是你的自動編譯沒打開 project >build automatically 第二個要注意你的工程項目上有沒有打小紅叉知瞎 項目報錯時 eclipse是不自動編譯的 你可以檢查一下是否有些類出錯 或是檢查一下 構建路徑 是否完整 特別是從換機子調試程序時 有些導入jar包的路徑不對
通常我們遇到的是第二個 就是有的包在別人機器上是有的 但是到你的機器上相同路徑是沒有的 刪去和那個包有關系的 或者添加新的包路徑
eclipse出現不編譯工程的現象 怎麼刷新classes目錄下也是空的
具體都操作了 打開project >build automatically 試後不行 還是不編譯
打開project ——> build automatically 另外 clean一下就可能會編譯了 結果還不行 (一般先運行project ——>clean… 然後再陪陪執行build automatically)
eclipse默認是選自動編譯 即使取消自動編譯 手動build工程 也不能編譯
出現這種情況一般有以下幾種原因 如果項目里引了某個不用的jar包 而那個包又被你刪了 就會出現不報錯但怎麼也編譯不出來class文件的情況 可以把所有包都刪除 然後一個一個的再引入(需要的) 不要一下子把所有包都引入來 沒用的可能會引起不良後果
想刪掉某個class文件重新生成 刪除class文件後 但classes目錄下的文件夾被其它程序打開 比如Total Commander 此時編譯也不會通過 在problems下可能會提示 con t delete classes …… 關掉其它程序重新編譯即可
還有種情況是remove掉 JRE System Library 重新導入即可編譯 但是什麼原因導致的還不清楚
項目引用了其他的項目 而被你引用的項目引用蘆猛蠢了某個不用的jar包之類
lishixin/Article/program/Java/ky/201311/28954