.NET 1.1 -> .NET 4 への 移行(Windows アプリ)

ちょっと機会がありそうなので、試してみた。
Visual Studio 2010 のプロジェクト変換ウィザード だけでいけました!といっても、すごくシンプルな構成だったからだと思いますが。


構成
.NET 1.1 Windows アプリ から .NET 1.1 Web サービス(Web 参照で参照を追加している)に接続するだけ。

Form1.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication1
{
  /// <summary>
  /// Form1 の概要の説明です。
  /// </summary>
  public class Form1 : System.Windows.Forms.Form
  {
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.DataGrid dataGrid1;
    /// <summary>
    /// 必要なデザイナ変数です。
    /// </summary>
    private System.ComponentModel.Container components = null;

    public Form1()
    {
      //
      // Windows フォーム デザイナ サポートに必要です。
      //
      InitializeComponent();

      //
      // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
      //
    }

    /// <summary>
    /// 使用されているリソースに後処理を実行します。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    #region Windows フォーム デザイナで生成されたコード // 自動生成部は省略
    #endregion

    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main() 
    {
      Application.Run(new Form1());
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
      DataSet param = new DataSet();
      DataTable table = param.Tables.Add("TABLE");
      table.Columns.AddRange(new DataColumn[] {
        new DataColumn("ID", typeof(int)), 
        new DataColumn("NAME", typeof(string)), 
        new DataColumn("DATE", typeof(DateTime))});
      localhost.Service1 sv = new WindowsApplication1.localhost.Service1();
      sv.Url = "http://<IPアドレス>/WebService2/Service1.asmx";
      DataSet result = sv.CreateDataSet(param);
      this.dataGrid1.DataSource = result.Tables[0];
    }
  }
}

Service1.asmx.csサービス側は、.NET 1.1 のままですが念のため。

using System;
using System.ComponentModel;
using System.Data;
using System.Web.Services;

namespace WebService2
{
  /// <summary>
  /// Service1 の概要の説明です。
  /// </summary>
  public class Service1 : System.Web.Services.WebService
  {
    public Service1()
    {
      //CODEGEN: この呼び出しは、ASP.NET Web サービス デザイナで必要です。
      InitializeComponent();
    }

    #region コンポーネント デザイナで生成されたコード 
    
    //Web サービス デザイナで必要です。
    private IContainer components = null;
        
    /// <summary>
    /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
    /// コード エディタで変更しないでください。
    /// </summary>
    private void InitializeComponent()
    {
    }

    /// <summary>
    /// 使用されているリソースに後処理を実行します。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if(disposing && components != null)
      {
        components.Dispose();
      }
      base.Dispose(disposing);    
    }
    
    #endregion

    [WebMethod]
    public DataSet CreateDataSet(DataSet param)
    {
      param.Tables[0].Rows.Add(new object[] { 1, "AAA", DateTime.Now});
      return param;
    }
  }
}

移行した Windows Form のソースは、デザイナで開いても .Designer.cs は出来ませんでした。もちろん新規追加した Form は .Designer.cs が出来ます。
ハマった事は、Visual Studio 2003 で Web 開発って、VS の開発サーバーが無いんですね、忘れてました。。


今回は、単純な実装しか試していませんので鵜呑みにするのは危険です…。


2010/11/08 追記
書き忘れてました。.NET 4 にするには、プロジェクトのプロパティから対象の Framework を .NET 4 に変更して下さい。デフォルトでは、.NET 2.0 になっています。