理論上,於 .net 4.0 時,/bin 資料夾並不會出現跟專案名稱一樣的 dll 檔,但檢視我升級後的專案,裡頭卻有一個 UpTestWeb.dll ,於是我把他砍了,接著一堆錯誤就出來了,眼睛很花,頭...很沈重。
在網路上看到許多前輩討論 .net 1.1 升級的經驗談,其中於 shang 的一篇文章「 从ASP.NET 1.1升级到2.0 」提到:「将所有独立的代码文件和AssemblyInfo.cs都被移到 App_Code 目录下」,發現自己少了這個步驟。原來,如果將與 .aspx 無關的 .cs 都移到 /App_Code ,於 .net 2.0 以後才可以讓其他程式碼存取。基本上,我們自己所定義的類別程式,都應該放在 /App_Code,若是已經編譯過的 dll 檔,則是擺放在 /Bin 下面,如此其他程式才能參考的到(Ref.ASP.NET 網站中的共用程式碼資料夾)。
在這次升級的過程中,我大致做了以下動作:
01:將與 .aspx 無關的 .cs 都移到 /App_Code
02:把 .aspx 裡的Codebehind 改成 CodeFile,同時也要調整 Inherits。舉例來說:
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="UpTestWeb._Default" %> 換成 <%@ Page language="c#" CodeFile="Default.aspx.cs" AutoEventWireup="false" Inherits="_Default" %>
03:把 .aspx 的
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 換成 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
04:將 .aspx.cs 裡的 namespace XXX { ... } 拿掉, 並將
public class xxx : System.Web.UI.Page 改成
public partial class xxx : System.Web.UI.Page
05:於 .aspx.cs 裡,類似 protected System.Web.UI.WebControls.Label lblUserName; 這種的宣告都砍掉。
參考:
01:ASP.NET 網站中的共用程式碼資料夾
02:A Beginner's Guide to ASP.NET Application Folders
03:从ASP.NET 1.1升级到2.0
04:KB-ASP.NET 2.0 網站部署的變革
.net 1.1升級真的很麻煩
回覆刪除有時候乾脆留皮不留骨的換成MVC或較新的程式重寫更快些(如果含後續維護)
除非系統大到沒辦法