逐步解說:在 Visual Studio 中將網站專案轉換成 Web 應用程式專案
小羊羊忘記用專案來寫WEB,導致抄送無法,該怎麼辦呢?
別擔心,不用更改程式碼,這裡的教學讓你一次搞定!
原文:https://msdn.microsoft.com/zh-tw/library/aa983476(v=vs.100).aspx
本逐步解說說明如何將現有的 Visual Studio 網站專案轉換成 Visual Studio Web 應用程式專案。 如需這些專案類型的詳細資訊,請參閱 Web 應用程式專案和網站專案的比較。
本逐步解說所述的工作包括下列各項:
- 開啟並驗證網站專案。
- 建立新的 Web 應用程式專案。
- 設定專案參考。
- 將檔案複製到新的 Web 應用程式專案。
- 轉換專案檔。
- 執行 Web 應用程式專案。
- 加入命名空間語法。
- 轉換宣告式型別資料集。
- 轉換設定檔目的碼。
在您轉換專案之前,應該先驗證它是否能夠正常運作。 這樣可避免在轉換期間發生錯誤。
若要開啟及驗證 Web 專案
- 開啟現有的方案。
- 按一下 [檔案] 功能表上的 [開啟],然後按一下 [網站]。[開啟網站] 對話方塊隨即顯示。
- 選取您要開啟的專案資料夾,然後按一下 [開啟]。
- 按一下 [建置] 功能表中的 [建置網站]。
- 按一下 [偵錯] 功能表上的 [開始偵錯]。 或者,也可以按 F5 鍵。
注意事項如果 [未啟用偵錯] 對話方塊顯示,選取 [加入已啟用偵錯的新 Web.config 檔案]。 這樣會在 Web.config 檔案中將 compilation 項目的 debug 屬性設定為 true。 請務必將這個設定變更回 false,然後再將專案部署到實際執行環境。 - 驗證專案如預期般執行。
轉換現有網站專案的最佳策略是先在個別目錄中建立新的空白 Web 應用程式專案。 這樣做可避免變更現有網站專案檔的任何部分, 同時讓您可以將現有功能複製到新的 Web 應用程式專案。
當您擁有數個想要使用的類別庫 (Class Library) 專案時,將新專案加入現有方案中不失為一個好方法。 此外,您可以啟動 Visual Studio 的新執行個體,並建立新的方案與專案。
若要在新方案中建立新的 Web 應用程式專案
- 在 Visual Studio 中關閉所有開啟的方案。
- 按一下 [檔案] 功能表上的 [新增],然後按一下 [專案]。[新增專案] 對話方塊隨即出現。
- 在 [新增專案] 對話方塊的 [專案類型] 區段中,展開您要使用的語言,然後選取 [Web] 以顯示 Web 相關範本。
- 選取 [ASP.NET 空白 Web 應用程式]。
- 依序輸入 [名稱]、[位置] 和 [方案名稱] 的值,然後按一下 [確定] 建立 Web 應用程式專案。
設定專案參考
如果網站專案需要其他專案或組件參考,您可以將這些參考加入 Web 應用程式專案。
為了避免發生錯誤,在轉換專案檔之前,請針對網站專案中存在於 Bin 資料夾的組件加入 Web 應用程式專案的參考。
如需詳細資訊,請參閱專案參考。
若要加入 Web 應用程式專案的參考
- 在 [方案總管] 中,以滑鼠右鍵按一下 [參考],再按一下 [加入參考]。接著會顯示 [加入參考] 對話方塊。
- 選取您要加入的參考,然後按一下 [確定]。
- 以滑鼠右鍵按一下 [方案總管] 中的 Web 應用程式,然後按一下 [建置]。Visual Studio 會建置專案並驗證任何專案對專案的參考是否能夠正常運作。
將檔案複製到 Web 應用程式專案
加入現有檔案最簡單的方式,是將檔案從網站專案目錄複製到 Web 應用程式專案目錄。
若要將網站專案轉換為 Web 應用程式專案
- 以滑鼠右鍵按一下 [方案總管] 中的網站專案,然後選取 [在 Windows 檔案總管中開啟資料夾]。
- 選取要複製的網站檔案。
- 以滑鼠右鍵按一下選取的檔案,然後按一下 [複製]。
- 以滑鼠右鍵按一下 Web 應用程式專案中的 Web 應用程式專案,然後按一下 [在 Windows 檔案總管中開啟資料夾]。
- 將網站專案檔貼到 Web 應用程式專案目錄中。
- 在 Web 應用程式專案的 [方案總管] 中,按一下 [顯示所有檔案] 按鈕。
- 在 [方案總管] 中選取新的檔案。
- 以滑鼠右鍵按一下選取的檔案,然後按一下 [加入至專案]。
網站專案和 Web 應用程式專案之間的一項差異如下:在網站專案中,ASP.NET 會動態產生 ASP.NET Web Form 網頁和使用者控制項的部分類別。 將檔案從網站專案複製到 Web 應用程式專案之後,您會注意到每個網頁和使用者控制項的程式碼後置 (Code-Behind) 檔案仍然與 .aspx、.master 和 .ascx 檔案相關聯, 並且沒有產生任何 .designer.cs 或 .designer.vb 檔案。 在進行下一步驟時,您要轉換這些網頁,將其部分類別儲存在 .designer.cs 或 .designer.vb 檔案中。
轉換專案檔
Visual Studio 中有個選項,可以將 Web 應用程式專案中的網頁與類別轉換成使用部分類別。 部分類別是用來區隔網頁中的標記或使用者控制項的程式碼後置程式碼。 這些設計工具產生的類別會儲存在個別的檔案中,與程式碼後置檔案分開。
這項轉換流程會讓 Visual Studio 遞迴地檢查專案中的每個網頁、主版頁面與使用者控制項,並自動產生每個項目的 .designer.cs 或 .designer.vb 檔案。 Visual Studio 也會將 .aspx 或 .ascx 檔案變更為使用 codeBehind 屬性,而不使用 codeFile 屬性。 此轉換程序也會將 App_Code 資料夾重新命名為 Old_App_Code。
若要將 Web 應用程式專案中的網頁和類別轉換成使用部分類別
- 在 [方案總管] 中,以滑鼠右鍵按一下包含所要轉換之網頁和類別的根專案資料夾,然後按一下 [轉換成 Web 應用程式]。
- 建置專案並查看是否有任何編譯錯誤。
如果您看到錯誤,兩個最可能的原因如下:
- 遺失必須加入專案的組件參考。
- 動態產生的型別發生問題,例如 Profile 物件或型別資料集。
如果遺失組件參考,請開啟參考管理員並將其加入。 如果您使用的是動態產生的型別,請參閱本主題稍後的轉換宣告式型別資料集和轉換設定檔目的碼。
因為 ASP.NET 會動態編譯 App_Code 資料夾中的所有類別,所以您不應該將編譯為 Web 應用程式專案之一部分的類別儲存在此資料夾中。 如果您這麼做,類別就會編譯兩次。 第一次會編譯為 Visual Studio Web 應用程式專案組件的一部分,而第二次則是在執行階段由 ASP.NET 進行編譯。 這樣可能導致發生「無法載入型別」的例外狀況,因為應用程式中有重複的型別名稱。
反而,您應該將類別檔案儲存在 App_Code 以外的任何專案資料夾內。 這項作業會自動由 [轉換成 Web 應用程式] 命令執行,該命令會將資料夾重新命名為 Old_App_Code。
執行 Web 應用程式專案
您現在可以編譯並執行應用程式了。 根據預設,Visual Studio 會使用內建的 Visual Studio 程式開發伺服器來執行網站。 或者,您也可以將專案設定為使用網際網路資訊服務 (IIS)。 若要管理 Web 應用程式專案設定,請以滑鼠右鍵按一下專案,然後按一下 [屬性]。 您可以接著選取 [Web] 索引標籤以設定這些執行階段設定。
如需詳細資訊,請參閱專案屬性、Web 索引標籤。
當您將網站專案轉換成 Web 應用程式專案時,請考量以下的轉換選項:
- 加入命名空間語法。
- 轉換宣告式型別資料集。
- 轉換設定檔目的碼。
加入命名空間語法
根據預設,使用 Visual Studio 網站專案模型所建置的網頁和類別,並不會自動包含程式碼命名空間。 不過,使用 Visual Studio Web 應用程式專案模型所建置的網頁、控制項和類別,則會自動包含程式碼命名空間。 將網站專案轉換成 Web 應用程式專案時,必須對程式碼加入命名空間。
例如,當您使用 C# 時,可以在 C# 程式碼編輯器中藉由使用 [範圍陳述式] 捷徑功能表命令,在 Visual Studio 內將命名空間加入使用現有類別的程式碼中。
若要將命名空間加入現有的類別
- 開啟您要修改的程式碼檔案。
- 在原始檔編輯器中選取一個或多個類別,以滑鼠右鍵按一下選取的程式碼,然後按一下 [範圍陳述式]。
- 選取清單中的 [命名空間] 項目。
具有 .aspx、.ascx、.master、.ashx、.asmx,和 .asax 等副檔名的檔案都包含指示詞 (例如,@ Page 指示詞),並帶有可以列出類別名稱的 Inherits 或 Class 屬性,以便在出現程式碼後置網頁時可以加以叫用 (Invoke)。 如果您將命名空間加入這些檔案類型的程式碼後置檔案,則也必須在 Inherits 和 Class 宣告中加入命名空間。 例如,如果將WebApplication5 命名空間加入名為 Details.aspx 網頁的程式碼後置檔案中,則應該同時將 @ Page 指示詞的Inherits 屬性從 inherits=Details_aspx 變更為 inherits=WebApplication5.Details_aspx。
注意事項 |
|---|
如果必須在檔案中更新命名空間數次,可以使用 Visual Studio 編輯器中的尋找和取代功能。
|
如需如何使用 [範圍陳述式] 命令的詳細資訊,請參閱 HOW TO:使用範圍陳述式程式碼片段。
轉換宣告式型別資料集
如果網站專案在 App_Code 資料夾中包含了強型別 (Strongly Typed) 的資料集類別,則您應該進行額外的變更來修正 Web.config 檔案中的 connectionString 項目。 同時,您必須針對資料集類別中的每個 TableAdapter 物件,重設connectionString 項目。
若要修正強型別資料集的 connectionString 項目
- 在 [方案總管] 中,以滑鼠右鍵按一下 App_Code 資料夾中的資料集類別,然後按一下 [設計工具檢視]。資料集的 [設計工具] 視窗隨即出現。
注意事項如果設定了資料集連接,就可以按兩下資料集,在設計工具中加以顯示。 - 以滑鼠右鍵按一下 TableAdapter 物件,然後按一下 [屬性]。
- 選取 Connection 屬性,然後選取可用的選項來重設連接。當您更新連接時,也會更新連接字串參考。
- 針對每個資料集中的每個 TableAdapter 物件重複執行這些步驟。
轉換設定檔目的碼
設定檔屬性可讓您在個人化資料庫中儲存及擷取使用者設定檔資料。 在網站專案中,ASP.NET 會在專案中自動將Profile 物件 (ProfileCommon 類別的執行個體) 加入至每個 ASP.NET 網頁。 這個物件會為定義在應用程式 Web.config 檔案的設定檔區段中的所有屬性,提供強型別的存取。 您可以取得這個物件的 IntelliSense 資料,並自動從其中儲存及擷取值。 如需 Profile 屬性的詳細資訊,請參閱 ASP.NET 設定檔屬性概觀。
Web 應用程式專案不會自動包含 ProfileCommon 類別。 不過,您可以建立自己的 ProfileCommon 類別,以包含設定於設定檔系統之項目的強型別屬性。 之後,您就可以存取 HttpContext 物件目前的 Profile 屬性,以取得並設定屬性。 在下列範例中,會示範如何建立包含在 Class1.cs (Visual Basic 則為 Class1.vb) 檔案中的自訂ProfileCommon 類別。
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Profile;
namespace WebApplication1
{
public class ProfileCommon
{
public Teachers Teachers
{
get
{
return (Teachers) HttpContext.Current.Profile.GetPropertyValue("Teachers");
}
set
{
HttpContext.Current.Profile.SetPropertyValue("Teachers",value);
}
}
}
}
接下來您可以在網頁上加入名為 Profile 且必須使用設定檔系統之 ProfileCommon 類別的執行個體,如下列範例所示。
public partial class _Default : System.Web.UI.Page
{
ProfileCommon Profile = new ProfileCommon();
protected void Button1_Click(object sender, EventArgs e)
{
Teachers teachers = new Teachers();
teachers.Add(new Teacher("scott"));
teachers.Add(new Teacher("bob"));
teachers.Add(new Teacher("paul"));
Profile.Teachers = teachers;
}
protected void Button2_Click(object sender, EventArgs e)
{
GridView1.DataSource = Profile.Teachers;
GridView1.DataBind();
}
}
您不用變更網頁中的任何程式碼,並且您將可以用原始網站專案的相同處理方式來使用設定檔系統。 如需詳細資訊,請參閱 ASP.NET 設定檔屬性概觀。
沒有留言:
張貼留言