1. 程式人生 > >ASP.NET Web專案釋出選項:“允許更新此預編譯站點” 詳解

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