連載:〜ScottGu氏のブログより〜

マルチターゲットのサポート(VS 2010&.NET 4シリーズ)

Scott Guthrie 著/Chica
2009/09/04

 本記事は、Microsoftの本社副社長であり、ASP.NETやSilverlightなどの開発チームを率いるScott Guthrie氏のブログを翻訳したものです。氏の許可を得て転載しています。

 これは、VS 2010および.NET 4リリースに向けたブログ投稿シリーズの第3弾です。

 本日の投稿は、VS 2010で改善されたマルチターゲットのサポートについてです。これにより、.NETの複数のバージョンを使用したり、ターゲットにしたりできます。VS 2010のリリースでは、アーキテクチャへ大幅に手を入れており、数多くの新しいマルチターゲット機能を可能にし、さらに大幅に改善された体験を提供します。

サイドバイサイド(Side-by-Side)の理解

 VS 2010は以前のVisual Studioのバージョンと“サイドバイサイド”でインストールできます。つまり、VS 2008/VS 2005/VS 2003と同じマシンにインストールでき、必要なら同時にすべてのバージョンを使用できます。

 .NET 4.0も同じマシン上に.NETの以前のバージョンと“サイドバイサイド”でインストール可能です。.NET 4.0はフレームワークのライブラリおよびCLRエンジンの両方に対して新しいバージョン番号を持っているので、.NET 2.0、3.0、3.5とは完全に独立して動作します。つまり、.NET 4.0は.NET 2.0/3.0/3.5がインストールされたマシン上にインストールでき、いくつかのアプリケーションは.NET 4.0で実行し、ほかのものは古い.NETバージョンを使用して実行するように構成できます(IISの管理ツールにより、ASP.NETアプリケーションに対しても、このような構成が可能です)。これにより、すべての既存のアプリケーションを必ずしもテストおよびアップグレードする必要はなく、新しいアプリケーションで.NET 4.0が利用できます。

VS 2008のマルチターゲットのサポート

 VS 2008は、.NETでマルチターゲット・サポートを行ったVisual Studioの最初のリリースでした。つまりこれは、VS 2008を.NET 3.5プロジェクトだけでなく、.NET 3.0および.NET 2.0のプロジェクトの作成と編集のために使用できたということです。これにより、アプリケーションを実行するクライアントや本番サーバへ新しいバージョンの.NETを必ずしもインストールすることなく、開発者は新しいVisual Studioのツールの機能に素早くアップグレードし、それを活用できました。

 VS 2008のマルチターゲット・サポートでは、.NETのバージョン間の主な違いはフレームワークのライブラリにあり、.NET 2.0、.NET 3.0、.NET 3.5がすべて同じCLRのバージョン上で実行されるという事実を利用することができました。結果として、Visual Studioのコンパイラは同じIL出力を生成でき、デバッガは同じCLRエンジンに対してデバッグでき、マルチターゲットに関するIDEのサポートについては、対象とする.NETバージョンでサポートされていないときは、新しいアセンブリやプロジェクト・テンプレートが表示されないようになっていました。

 このマルチターゲット体験は、完ぺきではないまでも、動作していました。VS 2008でのIntelliSenseは(.NET 2.0をターゲットにしていたとしても)、フレームワークのライブラリにある.NET 3.5版の型やメンバを常に表示します。つまり、たとえASP.NET 2.0プロジェクトの作業をしていたとしても、ASP.NET 3.5にしかないメソッドを、たまにうっかり使用することになってしまうということです。

VS 2010のマルチターゲット・サポート

 VS 2010ではかなり大きなアーキテクチャの変更を行い、非常に改善された、より正確なマルチターゲットのサポートを可能にしました。

 VS 2010では、.NETのそれぞれのバージョンに対して、われわれが“参照アセンブリ”と呼んでいるものを出荷します。“参照アセンブリ”には、特定のフレームワークのアセンブリのメタデータしか含まれておらず、その実際の実装ではありません(これによりディスク上でのサイズが非常に小さくなっています)。ですが、このメタデータは、特定の.NETのフレームワークをターゲットにしているときに、VS 2010が常に100%正確なIntelliSenseを提供するのに十分なものです。これはまた、デザイナ内のプロパティ・グリッドを通して公開されているプロパティや、オブジェクト・ブラウザ内のAPI一覧、IDE内のそのほかすべてのさまざまな場所で、厳密なAPIのバージョンのシグネチャが正確に反映されることも意味します。

 VS 2010デバッガ、プロファイラ、コンパイラも更新しており、CLRの複数のバージョンをターゲットにできるようにしました。

VS 2010のマルチターゲット・サポートの使用

 これらの新しいマルチターゲット機能の動作をより理解するために、新しいASP.NET WebアプリケーションをVS 2010を使用して作成してみましょう。これを行うには、“ファイル->新規プロジェクト”メニュー・コマンドを使用して“新規プロジェクト”ダイアログを開きます。ダイアログの上部にあるバージョンのドロップダウンを使用して、.NET 2.0でサポートされているプロジェクト・テンプレートだけを表示させます。そうすると、ASP.NET 2.0 Webアプリケーションのプロジェクトを新規作成できます(図1)。


図1

 このプロジェクトでは.NET 2.0をターゲットにしているので、VS 2010は自動的にツールボックスやタグのIntelliSenseをフィルタリングして、ASP.NET 2.0で出荷されたコントロールだけを利用可能にします。VS 2008と違い、VS 2010のプロパティ・グリッドは、自動的にASP.NET 2.0のボタン・コントロールでサポートされているプロパティだけを表示しています(図2)。


図2

 コードを書くときも、VS 2010は.NET 2.0でサポートされていた型やメソッド/プロパティ/イベントのコードのIntelliSenseだけを表示します。以下(図3)では、“Response.Re”と入力したときの、ASP.NET 2.0の“Response”オブジェクトに対するIntelliSenseが見られます。


図3

 ビルトインのVS Webサーバを使用して、そのアプリケーションを起動させると、ASP.NET 2.0バージョンを使用して実行しています(そして、VS 2010のデバッガはCLR 2.0のプロセスをデバッグします)。


図4

.NET 2.0から .NET 4.0へプロジェクトを移行

 オプションとして、プロジェクトが.NETの新しいバージョンで動作するようにターゲットを変更でき、これにはソリューション・エクスプローラでそのプロジェクトを右クリックし、プロパティ・ダイアログを開きます。その中の“ターゲット フレームワーク”のドロップダウンで、ターゲットにしたい.NET Frameworkのバージョンを選択できます。


図5

 ここで、さまざまな.NETバージョンから選択できます。その一覧に含まれているものに“Server Core”プロファイルがありますが、これはGUIレス版のWindows Server 2008 R2をサポートしています。ただし、これはいくつかのAPIをサポートしていません。メタデータおよびIntelliSenseに使用している参照アセンブリがどのバージョンやリリースもサポートできるので、もし新しいAPIが導入されたとしても、(100%の正確性とともに)それらのバージョンを今後のサービスパックで配布することもできます。

 今回のウォークスルーでは、プロジェクトで.NET 4.0を使用するように選択します。これを行うとき、VS 2010は自動的にプロジェクトの参照アセンブリとweb.configファイルを更新し、適切に新しいバージョンを反映します。

 これを一度行うと、VS 2010はツールボックスやタグのIntelliSenseのフィルタリングを行い、ASP.NET 4.0バージョンで利用可能な新しいコントロールやプロパティをすべて表示します。例えば、以下(図6)のプロパティ・グリッドでは、現在ASP.NET 4.0にあるすべてのコントロール上で利用できる新しい“ClientIDMode”プロパティを表示しています。これにより、クライアントIDの出力方法を制御でき、見苦しいクライアントIDを避けることができます(これは今後のブログ投稿でカバー予定のASP.NET 4.0の新機能です)。


図6

 これでプロジェクトが.NET 4.0を利用するようにアップグレードが完了したので、VS 2010も.NET 4.0での新しい型や型のメソッド/プロパティ/イベントに対するコードをIntelliSenseで表示するようになります。例えば以下(図7)では、ASP.NET 4.0の“Response”オブジェクト上で利用可能ないくつかの新しいリダイレクト用メソッドが確認できます(これらは先ほどプロジェクトが.NET 2.0をターゲットにしていた場合には表示されていませんでした)。


図7

 この新しいResponse.RedirectPermanent()メソッドは、“HTTP 301 Moved”レスポンスの発行を簡単にします。これにより、検索エンジンにサイトの無効なリンクを蓄積せずに済みます。URLルーティング・エンジンはいまや ASP.NET WebフォームおよびASP.NET MVCベースのアプリケーションの両方でサポートされていますので、この新しいResponse.RedirectToRoute()メソッドにより、そこで宣言したルートへ簡単にリダイレクトできます。

 そして、ビルトインのVS Webサーバを使用してアプリケーションを起動すると、VS 2010はASP.NET 4.0バージョンを使用して、それを実行します。


図8

まとめ

 VS 2010のマルチターゲット・サポートにより、.NET 4.0、.NET 3.5、.NET 3.0、.NET 2.0をターゲットにしたプロジェクトで作業が可能になります。これにより、いますぐアプリケーションを実行しているクライアントとサーバを.NET 4.0へアップグレードすることなく、新しいツール機能の利用を開始できます。改善されたマルチターゲット・サポートは確実に、この体験を以前にも増して、よりよく、より正確なものにします。

 Hope this helps,

 Scott

 P.S. ブログに加え、Twitterを使った素早い投稿やリンクの共有も行っています。http://www.twitter.com/scottguにて、わたしをTwitterでフォローできます(@scottguがわたしのtwitter名です)。End of Article

   
 
インデックス・ページヘ  「〜ScottGu氏のブログより〜」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間