共用方式為


逐步解說:在 Visual Studio 中將網站專案轉換成 Web 應用程式專案

更新:2007 年 11 月

本逐步解說說明如何將現有的 Microsoft Visual Studio 2005 網站專案轉換成 Microsoft Visual Studio 2005 Web 應用程式專案。Web 應用程式專案模型所使用的概念處理方式,與 Visual Studio .NET 2003 中的 Web 專案相同,這包括專案檔 (以包含和排除檔案),以及單一組件 (Assembly) 的編譯 (Compilation)。如需詳細資訊,請參閱從 Visual Studio .NET 轉換 Web 專案

本逐步解說將說明的工作包括下列項目:

  • 開啟並驗證 Visual Studio 2005 網站專案。

  • 建立新的 Visual Studio 2008 Web 應用程式專案。

  • 設定專案參考。

  • 將檔案複製到新的 Web 應用程式專案。

  • 轉換專案檔。

  • 執行 Web 應用程式專案。

  • 加入命名空間 (Namespace) 語法。

  • 轉換宣告式型別資料集。

  • 轉換設定檔目的碼 (Object Code)。

必要條件

若要完成這個逐步解說,您必須要有:

  • Visual Studio 2008 或 Microsoft Visual Studio 2005 Service Pack 1 (SP1)

  • .NET Framework 2.0 版。

開啟並驗證 Visual Studio 2005 網站專案

在您轉換專案之前,應該先驗證它是否能夠正常運作。這樣可避免在轉換期間發生錯誤。

若要開啟並驗證 Visual Studio 2005 Web 專案

  1. 開啟現有的 Visual Studio 2005 方案。

  2. 按一下 [檔案] 功能表上的 [開啟],然後按一下 [網站]。

    [開啟網站] 對話方塊隨即顯示。

  3. 選取您要開啟的專案資料夾,然後按一下 [開啟]。

  4. 按一下 [建置] 功能表中的 [建置網站]。

  5. 按一下 [偵錯] 功能表上的 [開始偵錯]。或者,也可以按 F5 鍵。

    注意事項:

    如果 [未啟用偵錯] 對話方塊顯示,選取 [加入已啟用偵錯的新 Web.config 檔案]。

  6. 驗證專案如預期般執行。

建立新的 Visual Studio 2008 Web 應用程式專案

轉換現有 Visual Studio 2005 網站專案的最佳策略是先在個別的目錄中建立新的空白 Visual Studio 2008 Web 應用程式專案。這樣做可避免變更現有網站檔案的任何部分,同時讓您可以將現有功能複製到新的 Web 應用程式專案。

當您擁有數個想要使用的類別庫 (Class Library) 專案時,將新專案加入現有方案中不失為一個好方法。此外,您可以啟動 Visual Studio 的新執行個體,並建立新的方案與專案。

若要在新方案中建立新的 Visual Studio 2008 Web 應用程式專案

  1. 關閉 Visual Studio 2008 中所有開啟的方案。

  2. 按一下 [檔案] 功能表上的 [新增],然後按一下 [專案]。

    [新增專案] 對話方塊隨即出現。

  3. 在 [新增專案] 對話方塊的 [專案類型] 區段中,展開您要使用的語言,然後選取 [Web] 以顯示 Web 相關範本。

  4. 選取 [ASP.NET Web 應用程式]。

  5. 依序輸入 [名稱]、[位置] 和 [方案名稱] 的值,然後按一下 [確定] 建立 Web 應用程式專案。

  6. 專案建立完成之後,刪除自動建立的 Default.aspx 和 Web.config 檔案。

設定專案參考

如果 Visual Studio 2008 網站專案需要其他的專案或組件參考,您可以將那些加入 Web 應用程式專案。您可以在 [方案總管] 內的 [參考] 節點下,查看新的 Visual Studio 2008 Web 應用程式專案的預設參考清單。

注意事項:

為了避免發生錯誤,在轉換專案檔之前,請針對存在於 Bin 資料夾的組件加入 Web 應用程式專案的參考。如需如何加入參考的詳細資訊,請參閱下列程序。

如需詳細資訊,請參閱專案參考

若要加入 Visual Studio 2008 Web 應用程式專案的參考

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [參考],再按一下 [加入參考]。

    接著會顯示 [加入參考] 對話方塊。

  2. 選取您要加入的參考,然後按一下 [確定]。

  3. 以滑鼠右鍵按一下 [方案總管] 中的 Web 應用程式,然後按一下 [建置]。

    Visual Studio 會建置專案並驗證任何專案對專案的參考是否能夠正常運作。

將檔案複製到 Web 應用程式專案

加入現有檔案最簡單的方式,是將檔案從 Visual Studio 2008 網站專案目錄複製到 Web 應用程式專案目錄。

注意事項:

如果 [資料來源組態精靈] 在複製程序期間啟動,請在精靈的對話方塊中按一下 [取消],然後再繼續複製其他的檔案。

若要將網站專案轉換為 Web 應用程式專案

  1. 以滑鼠右鍵按一下 [方案總管] 中的網站專案,然後選取 [在 Windows 檔案總管中開啟資料夾]。

  2. 選取要複製的網站檔案。

  3. 以滑鼠右鍵按一下選取的檔案,然後選取 [複製]。

  4. 以滑鼠右鍵按一下 Web 應用程式專案中的 Web 應用程式專案,然後選取 [在 Windows 檔案總管中開啟資料夾]。

  5. 將網站專案檔案貼到 Web 應用程式目錄中。

  6. 在 Web 應用程式專案的 [方案總管] 中,按一下 [顯示所有檔案] 按鈕。

  7. 在 [方案總管] 中選取新的檔案。

  8. 以滑鼠右鍵按一下選取的檔案,然後按一下 [加入至專案]。

Visual Studio 2008 網站專案和 Visual Studio 2008 Web 應用程式專案之間的一項差別是,網站專案模型會動態產生工具所產生的部分類別。

將檔案從網站專案複製到 Web 應用程式專案之後,您會注意到每個網頁和使用者控制項的程式碼後置 (Code-Behind) 檔案仍然與 .aspx、.master 和 .ascx 檔案相關聯,並且沒有產生任何 .designer.cs 或 .designer.vb 檔案。在進行下一步驟時,您要轉換這些網頁,將其部分類別儲存在 .designer.cs 或 .designer.vb 檔案中。

轉換專案檔

Visual Studio 中有個選項,可以將 Web 應用程式專案中的網頁與類別轉換成使用部分類別。部分類別是用來區隔網頁中的標記或使用者控制項的程式碼後置程式碼。這些設計工具產生的類別會儲存在個別的檔案中,與程式碼後置檔案分開。

這項轉換程序會導致 Visual Studio 2008 遞迴地檢查專案中的每個網頁、主版頁面 (Master Page) 和使用者控制項,並針對每個項目自動產生 .designer.cs 檔案。此外,Visual Studio 也會變更 .aspx 或 .ascx 檔案以使用 codeBehind 屬性,而不要使用 codeFile 屬性。這個命令也會將 App_Code 資料夾重新命名為 Old_App_Code。

若要將 Web 應用程式專案中的網頁和類別轉換成使用部分類別

  1. 在 [方案總管] 中,以滑鼠右鍵按一下包含所要轉換之網頁和類別的根專案資料夾,然後按一下 [轉換成 Web 應用程式]。

  2. 建置專案並查看是否有任何編譯錯誤。

如果您看到錯誤,兩個最可能的原因如下:

  • 遺失必須加入專案的組件參考。

  • 動態產生的型別發生問題,例如 Profile 物件或型別資料集。

如果遺失組件參考,請開啟參考管理員並將其加入。如果您使用的是動態產生的型別,請參閱本主題稍後的轉換宣告式型別資料集轉換設定檔目的碼

因為 ASP.NET 2.0 會動態編譯 App_Code 資料夾中的所有類別,所以您不應該將編譯為 Visual Studio 2008 Web 應用程式專案一部分的類別儲存在此資料夾中。如果您這麼做,類別就會編譯兩次。第一次會編譯為 Visual Studio 2008 Web 應用程式專案組件的一部分,而第二次則是在執行階段由 ASP.NET 進行編譯。這樣可能導致發生「無法載入型別」的例外狀況,因為應用程式中有重複的型別名稱。

反而,您應該將類別檔案儲存在 App_Code 以外的任何專案資料夾內。這項作業會自動由 [轉換成 Web 應用程式] 命令執行,該命令會將資料夾重新命名為 Old_App_Code。

執行 Web 應用程式專案

您現在可以編譯並執行應用程式了。根據預設,Visual Studio 2008 會使用內建的 ASP.NET 程式開發伺服器來執行網站。或者,您也可以將專案設定為使用網際網路資訊服務 (IIS)。若要管理 Web 應用程式專案設定,請以滑鼠右鍵按一下專案,然後按一下 [屬性]。您可以接著選取 [Web] 索引標籤以設定這些執行階段設定。

如需詳細資訊,請參閱 專案設計工具、Web 網頁

其他轉換選項

將專案轉換成 Web 應用程式專案時,可以考慮其他的轉換選項。這些選項如下所示:

  • 加入命名空間語法。

  • 轉換宣告式型別資料集。

  • 轉換設定檔目的碼。

加入命名空間語法

根據預設,使用 Visual Studio 2008 網站專案模型所建置的網頁和類別,並不會自動包含程式碼命名空間。不過,使用 Visual Studio 2008 Web 應用程式專案模型所建置的網頁、控制項和類別,則會自動包含程式碼命名空間。將網站專案轉換成 Web 應用程式專案時,必須對程式碼加入命名空間。

例如,當您使用 C# 時,可以在 C# 程式碼編輯器中藉由使用 [範圍陳述式] 快速鍵功能表命令,在 Visual Studio 內將命名空間加入使用現有類別的程式碼中。

若要將命名空間加入現有的類別

  1. 開啟您要修改的程式碼檔案。

  2. 在原始檔編輯器中選取一個或多個類別,以滑鼠右鍵按一下選取的程式碼,然後按一下 [範圍陳述式]。

  3. 選取清單中的 [命名空間] 項目。

具有 .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:使用範圍陳述式程式碼片段

轉換宣告式型別資料集

如果 Visual Studio 2008 網站專案在 App_Code 資料夾中包含了強型別 (Strongly Typed) 的資料集類別,則您應該進行額外的變更來修正 Web.config 檔案中的 connectionString 項目。同時,您必須針對資料集類別中的每個 TableAdapter 物件,重設 connectionString 項目。

若要修正強型別資料集的 connectionString

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 App_Data 資料夾中的資料集類別,然後按一下 [設計工具檢視]。

    資料集的 [設計工具] 視窗隨即出現。

    注意事項:

    如果設定了資料集連接,就可以按兩下資料集,在設計工具中加以顯示。

  2. 以滑鼠右鍵按一下 TableAdapter 物件,然後按一下 [屬性]。

  3. 選取 Connection 屬性,然後選取可用的選項來重設連接。

    當您更新連接時,也會更新連接字串參考。

  4. 針對每個資料集中的每個 TableAdapter 物件重複執行這些步驟。

轉換設定檔目的碼

ASP.NET 2.0 增加了對設定檔屬性的支援。這項功能可以讓您在個人化資料庫中儲存及擷取使用者設定檔資料。在 Visual Studio 2008 網站專案中,ASP.NET 會在專案中自動將 Profile 物件 (ProfileCommon 類別的執行個體) 加入至每個 ASP.NET Web 網頁。這個物件會為定義在應用程式 Web.config 檔案的設定檔區段中的所有屬性,提供強型別的存取。您可以取得這個物件的 IntelliSense 資料,並自動從其中儲存及擷取值。

例如,應用程式的 Web.config 檔案可能會包含下列區段。

<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
    <add name="Teachers"
      type="Teachers"
      allowAnonymous="true" />
  </properties>
</profile>

在此例中,您可以將下列程式碼加入網頁,以儲存並擷取與 Teachers 物件有關的資訊,如下列範例所示。

public partial class _Default : System.Web.UI.Page 
{
    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();
    }
}

Visual Studio 2008 Web 應用程式專案不會自動包含 ProfileCommon 類別。不過,您可以建立自己的 ProfileCommon 類別,以包含設定於設定檔系統之項目的強型別屬性。之後,您就可以存取 HttpContext 物件目前的 Profile 屬性,以取得並設定屬性。下列範例說明如何建立自訂 ProfileCommon 類別。

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Profile;

namespace WebApplication6
{
    public class ProfileCommon
    {
        public Teachers Teachers
        {
            get
                {
                return (Teachers) HttpContext.Current.Profile.GetPropertyValue("Teachers");
                }
            set
            {
        HttpContext.Current.Profile.SetPropertyValue("Teachers",value);
            }
        }
    }
}

接下來您可以在網頁上加入名為 Profile 且必須使用設定檔系統之 ProfileCommon 類別的執行個體,如下列範例所示。

namespace WebApplication20
{
    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 設定檔屬性概觀

請參閱

工作

HOW TO:使用範圍陳述式程式碼片段

概念

從 Visual Studio .NET 轉換 Web 專案

專案參考

ASP.NET 設定檔屬性概觀

參考

專案設計工具、Web 網頁

@ Page