チュートリアル : Visual Studio の Web サイト プロジェクトから Web アプリケーション プロジェクトへの変換

更新 : 2007 年 11 月

このチュートリアルでは、既存の Microsoft Visual Studio 2005 Web プロジェクトを Microsoft Visual Studio 2005 の Web アプリケーション プロジェクトに変換する方法を説明します。Web アプリケーション プロジェクト モデルは、Visual Studio .NET 2003 の Web プロジェクトと概念的アプローチが同じです。たとえば、プロジェクト ファイルを使用してファイルの追加や除外を行う点や、単一のアセンブリにコンパイルされる点が共通しています。詳細については、「Visual Studio .NET からの Web プロジェクト変換」を参照してください。

Aa983476.alert_note(ja-jp,VS.90).gifメモ :

Visual Studio または Visual Web Developer Express Edition を使用して、ASP.NET Web アプリケーションを作成できます。

このチュートリアルでは、以下のタスクを行います。

  • Visual Studio 2005 Web サイト プロジェクトを開いて検証する。

  • 新しい Visual Studio 2008 Web アプリケーション プロジェクトを作成する。

  • プロジェクト参照を設定する。

  • ファイルをコピーして新しい Web アプリケーション プロジェクトに追加する。

  • プロジェクト ファイルを変換する。

  • Web アプリケーション プロジェクトを実行する。

  • 名前空間の構文を追加する。

  • 宣言型データセットを変換する。

  • プロファイル オブジェクト コードを変換する。

必要条件

このチュートリアルを実行するために必要な項目や条件は、次のとおりです。

  • Visual Studio 2008、Microsoft Visual Studio 2005 Service Pack 1 (SP1)、または Visual Web Developer Express Edition

  • .NET Framework version 2.0.

Visual Studio 2005 Web サイト プロジェクトを開いて検証する

プロジェクトを変換する前に、それが正常に動作していることを確認する必要があります。これによって、変換中のエラーを防ぐことができます。

Visual Studio 2005 Web プロジェクトを開いて検証するには

  1. 既存の Visual Studio 2005 ソリューションを開きます。

  2. [ファイル] メニューの [開く] をポイントし、[Web サイト] をクリックします。

    [Web サイトを開く] ダイアログ ボックスが表示されます。

  3. 開くプロジェクト フォルダを選択し、[開く] をクリックします。

  4. [ビルド] メニューの [Web サイトのビルド] をクリックします。

  5. [デバッグ] メニューの [デバッグ開始] をクリックします。代わりに、F5 キーを押すこともできます。

    Aa983476.alert_note(ja-jp,VS.90).gifメモ :

    [デバッグが無効です] ダイアログ ボックスが表示されたら、[新しい Web.config を追加してデバッグを有効にする] を選択します。

  6. プロジェクトが問題なく実行されることを検証します。

新しい Visual Studio 2008 Web アプリケーション プロジェクトの作成

既存の Visual Studio 2005 Web サイト プロジェクトを変換するには、まず、別のディレクトリに新しい空の Visual Studio 2008 Web アプリケーション プロジェクトを作成することをお勧めします。これによって、既存の Web サイト ファイルが変更されることはなくなります。また、これによって既存の機能を Web アプリケーション プロジェクトにコピーできます。

複数のクラスライブラリ プロジェクトを使用する場合は、新しいプロジェクトを既存のソリューションに追加できます。または、Visual Studio の新しいインスタンスを起動して、新しいソリューションとプロジェクトを作成することもできます。

新しい Visual Studio 2008 Web アプリケーション プロジェクトを新しいソリューション内で作成するには

  1. Visual Studio 2008 のすべてのソリューションを閉じます。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

    [新しいプロジェクト] ダイアログ ボックスが表示されます。

  3. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] で、使用する言語を展開し、[Web] をクリックして Web 関連テンプレートを表示します。

  4. [ASP.NET Web アプリケーション] を選択します。

  5. [名前]、[場所]、および [ソリューション名] に値を入力し、[OK] をクリックして Web アプリケーション プロジェクトを作成します。

  6. プロジェクトが作成されたら、自動作成された Default.aspx ファイルと Web.config ファイルを削除します。

プロジェクト参照の設定

Visual Studio 2008 Web サイト プロジェクトで追加のプロジェクト参照やアセンブリ参照を使用している場合は、これらを Web アプリケーション プロジェクトに追加できます。新しい Visual Studio 2008 Web アプリケーション プロジェクトのソリューション エクスプローラの [参照設定] ノードに、既定の参照が一覧表示されます。

Aa983476.alert_note(ja-jp,VS.90).gifメモ :

エラーの発生を防ぐため、プロジェクト ファイルの変換を開始する前に、Web アプリケーション プロジェクトに Bin フォルダ内のアセンブリの参照を追加します。参照を追加する方法の詳細については、次の手順を参照してください。

参照の詳細については、「プロジェクト参照」を参照してください。

Visual Studio 2008 Web アプリケーション プロジェクトに参照を追加するには

  1. ソリューション エクスプローラで、[参照設定] を右クリックし、[参照の追加] をクリックします。

    [参照の追加] ダイアログ ボックスが表示されます。

  2. 追加する参照を選択し、[OK] をクリックします。

  3. ソリューション エクスプローラで、Web アプリケーションを右クリックし、[ビルド] をクリックします。

    Visual Studio によりプロジェクトが構築され、プロジェクト間の参照に問題がないことが検証されます。

Web アプリケーション プロジェクトへのファイルのコピー

既存のファイルを追加する方法として最も簡単なのは、Visual Studio 2008 Web サイト プロジェクト ディレクトリのファイルを Web アプリケーション プロジェクト ディレクトリにコピーする方法です。

Aa983476.alert_note(ja-jp,VS.90).gifメモ :

コピー時にデータ ソース構成ウィザードが起動した場合は、ウィザードの [キャンセル] をクリックして、残りのファイルをコピーします。

Web サイト プロジェクトを Web アプリケーション プロジェクトにコピーするには

  1. ソリューション エクスプローラで、Web サイト プロジェクトを右クリックし、[エクスプローラでフォルダを開く] をクリックします。

  2. コピーする Web サイト プロジェクトのファイルを選択します。

  3. 選択したファイルを右クリックし、[コピー] をクリックします。

  4. ソリューション エクスプローラで Web アプリケーション プロジェクトを右クリックし、[エクスプローラでフォルダを開く] をクリックします。

  5. Web サイト プロジェクトのファイルを Web アプリケーション ディレクトリに貼り付けます。

  6. Web アプリケーション プロジェクトのソリューション エクスプローラで、[すべてのファイルを表示] をクリックします。

  7. ソリューション エクスプローラで、新しいファイルを選択します。

  8. 選択したファイルを右クリックし、[プロジェクトに含める] をクリックします。

Visual Studio 2008 Web サイト プロジェクトと Visual Studio 2008 Web アプリケーション プロジェクトの 1 つの相違点は、Web サイト プロジェクト モデルがツールを使用して動的に部分クラスを生成するということです。

Web サイト プロジェクトのファイルを Web アプリケーション プロジェクトにコピーした後も、各ページの分離コード ファイルとユーザー コントロールは、.aspx ファイル、.master ファイル、および .ascx ファイルに関連付けられたままです。.designer.cs ファイルや .designer.vb ファイルは、生成されません。次の手順では、これらのページを変換して、部分クラスの定義を .designer.cs ファイルまたは .designer.vb ファイルに保存します。

プロジェクト ファイルの変換

Visual Studio には、Web アプリケーション プロジェクトが部分クラスを使用できるように、ページとクラスを変換するオプションがあります。部分クラスを使用すると、ページ内またはユーザー コントロール内のマークアップを分離コードから抜き出すことができます。デザイナで生成されたクラスは、分離コード ファイルとは別のファイルに格納されます。

変換の実行時には、Visual Studio 2008 によってプロジェクトのすべてのページ、マスタ ページ、およびユーザー コントロールが再帰的にチェックされ、それぞれの .designer.cs ファイルが自動的に生成されます。さらに、Visual Studio によって、.aspx ファイルまたは .ascx ファイルが codeFile 属性ではなく codeBehind 属性を使用するように変更されます。App_Code フォルダの名前は Old_App_Code に変更されます。

Web アプリケーション プロジェクトで部分クラスを使用できるようにページとクラスを変換するには

  1. ソリューション エクスプローラで、変換するページとクラスが格納されているルート プロジェクト フォルダを右クリックし、[Web アプリケーションに変換] をクリックします。

  2. プロジェクトを構築して、コンパイル エラーがないことを確認します。

エラーがあった場合、それは主に次のどちらかが原因となって発生します。

  • プロジェクトに追加する必要があるアセンブリ参照が欠落している。

  • Profile オブジェクトや型付きデータセットのような動的に生成された型に問題がある。

アセンブリ参照が見つからない場合は、参照マネージャで、そのアセンブリ参照を追加します。動的に生成された型を使用する方法については、このトピックの「宣言型データセットの変換」および「プロファイル オブジェクト コードの変換」を参照してください。

ASP.NET 2.0 は App_Code フォルダのすべてのクラスを動的にコンパイルするため、そのフォルダには、Visual Studio 2008 Web アプリケーションの一部としてコンパイルするクラスを格納しないでください。格納した場合、そのクラスは 2 回コンパイルされます。最初は Visual Studio 2008 Web アプリケーション プロジェクト アセンブリの一部として、2 回目は ASP.NET によって実行時に、コンパイルされます。これによって "型を読み込めませんでした" 例外が発生することがあります。これは、アプリケーション内に複数の型名が混在するときに発生します。

クラス ファイルは、App_Code フォルダ以外のプロジェクト フォルダに格納してください。[Web アプリケーションに変換] をクリックすると、App_Code フォルダの名前が自動的に Old_App_Code に変更されるようになります。

Web アプリケーション プロジェクトの実行

これで、アプリケーションをコンパイルして実行できます。既定では、Visual Studio 2008 は、組み込みの ASP.NET 開発サーバーを使用してサイトを実行します。プロジェクトの構成内容を変更して、インターネット インフォメーション サービス (IIS: Internet Information Services) を使用することもできます。Web アプリケーション プロジェクトの設定を管理するには、プロジェクトを右クリックし、[プロパティ] をクリックします。次に、[Web] タブをクリックして、これらの実行時設定を構成します。

詳細については、「[Web] ページ (プロジェクト デザイナ)」を参照してください。

その他の変換オプション

プロジェクトを Web アプリケーション プロジェクトに変換するときは、この他に次の変換オプションを考慮する必要があります。次のようなオプションがあります。

  • 名前空間の構文を追加する。

  • 宣言型データセットを変換する。

  • プロファイル オブジェクト コードを変換する。

名前空間の構文の追加

既定では、Visual Studio 2008 Web サイト プロジェクト モデルを使用して構築されたページやクラスには、コードの名前空間は自動的には追加されません。一方、Visual Studio 2008 Web アプリケーション プロジェクト モデルで構築されたページ、コントロール、およびクラスには、コードの名前空間が自動的に追加されます。Web サイト プロジェクトを Web アプリケーション プロジェクトに変換するときは、コードに名前空間を追加する必要があります。

たとえば、C# を使用している場合、C# コード エディタのショートカット メニューの [ブロックの挿入] コマンドを使用して、Visual Studio の既存のクラスのコードに名前空間を追加できます。

既存のクラスに名前空間を追加するには

  1. 変更するコード ファイルを開きます。

  2. ソース エディタでクラス (複数可) を選択し、選択したコードを右クリックして、[ブロックの挿入] をクリックします。

  3. ボックスの一覧から [名前空間] を選択します。

分離コード ページの場合、拡張子が .aspx、.ascx、.master、.ashx、.asmx、および .asax のファイルにディレクティブ (たとえば @ Page ディレクティブ) が含まれ、そのディレクティブには呼び出すクラス名を一覧する Inherits 属性または Class 属性が含まれています。これらの分離コード ファイルに名前空間を追加する場合は、その名前空間を Inherits 宣言と Class 宣言にも追加する必要があります。たとえば、Details.aspx という名前のページの分離コード ファイルに WebApplication5 名前空間を追加する場合、@ Page ディレクティブの Inherits 属性を inherits=Details_aspx から inherits=WebApplication5.Details_aspx に変更します。

Aa983476.alert_note(ja-jp,VS.90).gifメモ :

ファイル内の数箇所にある名前空間を更新する必要がある場合は、Visual Studio エディタの検索置換機能を使用できます。

[ブロックの挿入] コマンドの使用方法の詳細については、「方法 : surround-with コード スニペットを使用する」を参照してください。

宣言型データセットの変換

Visual Studio 2008 Web サイト プロジェクトの App_Code フォルダに厳密に型指定されたデータセットのクラスがある場合は、Web.config ファイルの connectionString 要素を修復するために、さらに変更を加える必要があります。データセット クラスの各 TableAdapter オブジェクトの connectionString 要素も、リセットする必要があります。

厳密に型指定されたデータセットの connectionString を修復するには

  1. ソリューション エクスプローラで App_Code フォルダのデータセット クラスを右クリックし、[デザイナの表示] をクリックします。

    データセットの [デザイナ] ウィンドウが表示されます。

    Aa983476.alert_note(ja-jp,VS.90).gifメモ :

    データセット接続がある場合は、そのデータセットをダブルクリックすると、デザイナにその接続が表示されます。

  2. TableAdapter オブジェクトを右クリックし、[プロパティ] をクリックします。

  3. Connection プロパティを選択し、使用可能なオプションを選択して、接続をリセットします。

    接続を更新すると、接続文字列の参照も更新されます。

  4. 各データセットの各 TableAdapter オブジェクトに対して、この手順を繰り返します。

プロファイル オブジェクト コードの変換

ASP.NET 2.0 は、プロファイル プロパティに対するサポートを追加しました。この機能を使用すると、パーソナル化データベースにユーザー プロファイル データを格納したり、それを取得したりできます。Visual Studio 2008 Web サイト プロジェクトでは、プロジェクトの各 ASP.NET Web ページに、Profile オブジェクト (ProfileCommon クラスのインスタンス) が自動的に追加されます。このオブジェクトは、アプリケーションの 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();
    }
}

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim teachers As New Teachers()
        teachers.Add(New Teacher("Scott"))
        teachers.Add(New Teacher("Bob"))
        teachers.Add(New Teacher("Paul"))

        Profile.Teachers = teachers
    End Sub

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        GridView1.DataSource = Profile.Teachers
        GridView1.DataBind()
    End Sub
End Class

Visual Studio 2008 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);
            }
        }
    }
}

    Imports System 
    Imports System.Collections.Generic 
    Imports System.Text 
    Imports System.Web 
    Imports System.Web.Profile 

    Namespace WebApplication1 
        Public Class ProfileCommon
            Public Property Teachers() As Teachers
                Get
                    Return DirectCast(HttpContext.Current.Profile.GetPropertyValue("Teachers"), Teachers)
                End Get
                Set(ByVal value As Teachers)
                    HttpContext.Current.Profile.SetPropertyValue("Teachers", value)
                End Set
            End Property
        End Class
    End Namespace

次に、ProfileCommon クラスのインスタンスの 1 つである Profile を、次のコード例のように、プロファイル システムを使用する必要があるページに追加します。

    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();
        }
    }

    Public Partial Class _Default 
        Inherits System.Web.UI.Page 
        Public Profile As New ProfileCommon() 
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) 
            Dim teachers As New Teachers() 
            teachers.Add(New Teacher("scott")) 
            teachers.Add(New Teacher("bob")) 
            teachers.Add(New Teacher("paul")) 
            
            Profile.Teachers = teachers 
        End Sub 
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) 
            GridView1.DataSource = Profile.Teachers 
            GridView1.DataBind() 
        End Sub 
    End Class 

ページのその他のコードを変更する必要はありません。元の Web サイト プロジェクトの場合と同様にプロファイル システムを使用できます。詳細については、「ASP.NET プロファイル プロパティの概要」を参照してください。

参照

処理手順

方法 : surround-with コード スニペットを使用する

概念

Visual Studio .NET からの Web プロジェクト変換

プロジェクト参照

ASP.NET プロファイル プロパティの概要

参照

[Web] ページ (プロジェクト デザイナ)

@ Page