#使用visual studio 發布web項目
我們使用visual studio 可以通過如下的方法發布web網站:
在打開的對話框中,有一個選項至關重要,那就是:“允許更新此預編譯站點
”
“允許更新此預編譯站點
”這一項,是可選的,那么,選中與不選中,有何區別呢?
#"允許更新此預編譯站點" 選項的意義
我們在發布 .Net web項目時,一般情況下,項目中所有的.CS文件,會自動生成DLL動態鏈接庫,這就能夠很好的保護網站的源代碼,因為服務端代碼一般都是放在.CS文件里面的,既然都生成了DLL文件,那么,上傳到服務器,別人就不能輕易打開來看了!
但是,其它的文件,諸如ashx、aspx等文件,里面原來有什么,就是什么,別人可以打開這些文件來查看,盡管別人看不見CS代碼,但是仍然能夠看見ASPX文件里面的HTML代碼或部分服務器控件及相關的屬性;ashx這樣的文件,就相當於一個cs文件,里面的代碼也是能夠輕易看見的;
因此,.CS文件安全了,但是ASPX、ashx等文件,就不安全了;
那么,到底有沒有一種辦法,讓上傳到服務器的web文件,都安全呢?方法是有的,就是發布的時候,不選中 “允許更新此預編譯站點
”;
1、選中 “允許更新此預編譯站點”
如果發布web的時候,選中“允許更新此預編譯站點
”,那么,結果是這樣的:
整個網站文件,除了所有的CS文件編譯成為DLL文件之外,其它的文件,和原來的沒有任何變化,里面是什么,還是什么,只要別人通過記事本一打開,里面的代碼、HTML代碼等,都可以讓別人一覽無余。
除此之外,通過此種方式發布的網站,當用戶第一次訪問某個頁面的時候,需要經過編譯,查找BUG,之后,如果沒有任何錯誤,才能正常訪問,因此,速度會變得比較慢。之后的訪問就正常了;
2、不選中 “允許更新此預編譯站點”
如果在發布web的時候,不選中“允許更新此預編譯站點
”,那么,結果是這樣的:
1、網站里面的所有CS文件,都被編譯成為DLL文件;
2、除了cs文件,其它的文件,諸如ASPX、ASHX等文件,也一同被編譯起來,每個文件都在BIN目錄里面生成一個對應的*.compiled
文件;
之后,如果您通過記事本查看ASPX、ASHX等文件,里面不會看到任何的代碼,就連HTML代碼標記都看不見,打開這樣的文件,里面只有一行文字,內容為“這是預編譯工具生成的標記文件,不應被刪除!
”,且這些文件的大小都為1kb;
這樣的結果看着有點詭異,但是,web的訪問卻是正常的,不會出現任何不良的問題。
所以呢,使用這種方式發布web,ashx、aspx等文件都不能通過記事本打開,里面顯示的都是一行文字,因此,網站文件就非常安全了。
此外,通過此種方法發布的網站,所有內容都編譯好了,打開的速度是很快的。
3、Asp.Net MVC 的web項目也有同樣的結果
#當本地的web文件發生修改的時候,需要更新哪些文件到服務器;
1、如果發布方式,選中了“允許更新此預編譯站點”;
- 如果修改的是aspx或cshtml等網頁文件,那只需更新發布后的aspx文件到服務器;
- 如果修改的是aspx.cs文件,那需要將bin下的對應的dll更新到服務器;
- 如果修改的是ashx文件,那只需要將ashx文件更新到服務器;
2、如果發布方式,沒選中“允許更新此預編譯站點”;
- 如果修改的是aspx或cshtml等網頁文件,那需要將對應的DLL文件及.compiled文件都更新到服務器,而aspx文件不需要更新到服務器;
- 如果修改的是aspx.cs文件,那需要將bin下的對應的dll更新到服務器;
- 如果修改的是ashx文件,那需要將對應的DLL文件及.compiled文件都更新到服務器,而ashx文件不需要更新到服務器;
3、報錯:未預編譯文件“xxx.aspx”,因此不能請求該文件。
或者報錯“xxx.aspx has not been pre-compiled, and cannot be requested.”
原因:
發布方式,沒選中“允許更新此預編譯站點”,將某個頁面的dll替換到了,發布方式為選中“允許更新此預編譯站點” 的web服務器了;
也就是,發布方式設置不同,更新文件導致的報錯;
#參考
https://www.cnblogs.com/LifeKingcn/archive/2012/09/15/2686579.html