ASP.NET Web專案釋出選項:“允許更新此預編譯站點” 詳解
目錄
- #使用visual studio 釋出web專案
- #"允許更新此預編譯站點" 選項的意義
- 1、選中 “允許更新此預編譯站點”
- 2、不選中 “允許更新此預編譯站點”
- 3、Asp.Net MVC 的web專案也有同樣的結果
- #當本地的web檔案發生修改的時候,需要更新哪些檔案到伺服器;
- 1、如果釋出方式,選中了“允許更新此預編譯站點”;
- 2、如果釋出方式,沒選中“允許更新此預編譯站點”;
- 3、報錯:未預編譯檔案“xxx.aspx”,因此不能請求該檔案。
- #參考
#使用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