Silverlight 4 Toolkit の Silverlight5 へのマイグレーションについて

Silverlight 4 Toolkit は、ソースコードが公開されているコントロール集です。昨年に Silverlight 5 が公開されたこともあって、Toolkit を Silverlight 5 用に移行を検討している方もいらっしゃることでしょう。ソースコードを修正している場合は、Silverlight 5 Toolkit のソースコードを修正するか、Silverlight 4 用のプロジェクトを Silverlight 5 用に移行する必要があります。今回は、Silverlight 4 Toolkit のプロジェクトを Silverlight 5 プロジェクトに移行する方法を簡単に説明します。移行作業を行う前に、考慮しないといけないことがあります。それは、以下のようなプロジェクトです。

  • Silverlight.Control.Sdk ソリューション:System.Windows.Controls プロジェクト、System.Windows.Controls.Input プロジェクト
  • RiaClient.Sdk ソリューション:System.ComponentModel.DataAnnotations プロジェクト、System.Windows.Controls.Navigation プロジェクト、System.Windows.Data プロジェクト、System.Windows.Controls.Data プロジェクト

上記に含まれるプロジェクトが生成するアセンブリは、Silverlight 5 SDK が標準提供するように変更されています。つまり、これらのアセンブリに依存する箇所は、Silverlight 5 SDK のものに切り替える必要があります。これを踏まえて、移行に必要なものを以下に示します。

  • Silverlight 4 Toolkit April 2010のソースコード
  • Silverlight 5 Toolkit December 2011のソースコード

事前準備として、Silverlight 5 Toolkit に含まれる System.Windows.Controls.Toolkit.Internals.dll を Silverlight 4 Toolkit の Binaries フォルダーへコピーしておきます。この理由は、Silverlight 5 プロジェクト向けにビルドされたアセンブリに切り替える必要があるからです。また、Toolkit.snk を Silverlight 4 Toolkit の ソリューション ファイルがあるフォルダーにコピーします(厳密名の署名ファイルを Silverlight 5 Toolkit 用へ変更します)。

それでは、移行準備としてプロジェクト ファイルをテキストエディタで編集します。編集する内容を以下に示します。

  • <AssemblyOriginatorKeyFile>要素
    ..\System.Windows.Controls.snk を ..\Toolkit.snk に変更します。厳密名の署名ファイル名の変更です。
  • System.Windows.Controls.Toolkit.Internalsの<Reference>要素
    Version=2.0.5.0 を Version=5.0.5.0 に変更します。バージョン番号は、ビルド用のマジック番号です。
  • <Import>要素におけるMSBuildのTargetsファイルに対するパスをバージョン固有から、バージョン非依存へと変更します。
    $(MSBuildExtensionsPath)\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.CSharp.targets を $(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets に変更します。Silverlight 4 Toolkit が、バージョン固定になっているためです。
  • <None>要素のInclude属性を変更します。
    ..\System.Windows.Controls.snk を ..\Toolkit.snk に変更します。厳密名の署名ファイル名の変更です。

プロジェクト ファイルの編集ができたら、Visual Studio 2010 を使ってソリューションを開きます。ソリューションが開いたら、プロジェクト毎に以下の作業を行います。

  • プロジェクト プロパティで対象の Silevrlight バージョンを Silverlight 5 に変更します。これで、参照アセンブリの切り替えが行われます。
  • Silverlight 5 SDK で提供されるアセンブリを使って参照設定をやり直します。
  • ビルドを行ってビルドできることを確認します。

上記の手順をプロジェクトの依存関係に従って処理していけば、プロジェクトを Silverlight 5 用に移行することができます。RiaClient.Toolkit などは、Silverlight 5 用のソースをベースに再修正した方が良いでしょう。また、xxxx.Design ソリューションに関しても、同様の作業を注意深く行っていけば移行を行うことは可能ですが、Silverlight 5 用のソースコードを使うことをお勧めします。その理由は、プロジェクトの構造などがそれなりに変更されていますので、細かい変更点を調べるのが面倒だからです。私の場合は、この手順でコントロールをビルドしてから、Silverlight 5 Toolkit のサンプルを使って動作することを確認しています。

本番環境に適用するには、使用される環境で十分なテストを行ってから切り替えを行うようにしてください。Silverlight Toolkit を利用されている方はご存じだと思いますが、ライセンスがオープンソースとして提供されていますので、ここに示したような移行方法も自己責任で行う必要があるからです。また、Silverlight 5 Toolkit が提供されていることから、Silverlight 4 Toolkit に対する改善は行われなくなると考えられます。これは、新バージョンへの開発リソースが切り替わっているからであり、旧バージョンに対する保守は、必要に応じて使用者が行う必要があります。もし、改善などを加えましたら、是非とも情報の公開をお願いします。