Silverlight Dynamic Language SDK の使い方4

今回は、 Chiron.exeの/bや/z、/mオプションで作成されるアプリケーション・マニフェストを説明します。例題とするのは、DLR Consoleで使用されているAppManifest.xamlです。

 <Deployment 
  xmlns="https://schemas.microsoft.com/client/2007/deployment"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" 
  RuntimeVersion="2.0.31005.00" 
  EntryPointAssembly="Microsoft.Scripting.Silverlight"
  EntryPointType=
  "Microsoft.Scripting.Silverlight.DynamicApplication"
>
  <Deployment.Parts>
    <!-- Add additional assemblies here -->
    <AssemblyPart Source="Microsoft.Scripting.Silverlight.dll"/>
    <AssemblyPart Source="Microsoft.Scripting.Core.dll" />
    <AssemblyPart Source="Microsoft.Scripting.dll" />
    <AssemblyPart Source=
          "Microsoft.Scripting.ExtensionAttribute.dll" />
    <AssemblyPart Source="IronPython.dll" />
    <AssemblyPart Source="IronPython.Modules.dll" />
    <AssemblyPart Source="IronRuby.dll" />
    <AssemblyPart Source="IronRuby.Libraries.dll" />
    <AssemblyPart Source="Microsoft.JScript.Runtime.dll" />
    <AssemblyPart Source="Microsoft.JScript.Compiler.dll" />
  </Deployment.Parts>
</Deployment>

最初に取り上げるのが、Deployment要素のEntryPointAssembly属性とEntryPointType属性です。ここには、以下のように記述されています。

  • EntryPointAssembly="Microsoft.Scripting.Silverlight"
  • EntryPointType="Microsoft.Scripting.Silverlight.DynamicApplication"

属性名が表しているようにSilverlight2.0対応のランタイムが起動するプログラムが格納されたアセンブリと開始するクラスを指定しています。このDynamicApplicationクラスこそが、SilverlightとDLRを結びつけるものです。このエントリポイントのモデルは、DLRに限った話ではなくC#やVBを使ったSilverlightアプリケーションでも使用されているものです。そして、DynamicApplicationクラスはSystem.Windows.Applicationクラスを継承しています。

Deployment.Parts要素内のAssemblyPart要素にSilverlightランタイムが読み込むアセンブリをSource属性で指定します。ここで指定しているアセンブリを以下に示します。

アセンブリ名 説明
Microsoft.Scripting.Silverlight.dll Silverlight 2.0ランタイムのエントリポイントです。
Microsoft.Scripting.Core.dll DLRの本体です。
Microsoft.Scripting.ExtensionAttribute.dll IronPython 2.0RC1から追加されたDLRの補助アセンブリです。ビルド時のSystem.Core.dllとの衝突を回避するために導入されました。
Microsoft.Scripting.dll DLRを使用するための各種ヘルパーです。

これ以外のアセンブリが、動的言語のためのものです。アセンブリ名から、IronPython、IronRuby、Managed JScript用がどれかというのは自明でしょう。そしてSource属性は、上記のような書き方以外にURLによる記述も可能です。URLを使った表記の場合は、相対パスではなく絶対パス(https://で始まる)の記述になります。URLで記述した場合は、xapファイル内に対象のアセンブリを含める必要はありません。

プログラムを開発する上でSilverlight SDKなどで提供される拡張アセンブリを使用する場合は、AssemblyPart要素に記述する必要とxapファイルに含める必要があります。Visual StudioのSilverlightプロジェクトでは、この一連の作業をVisual Stduioが行ってくれます。動的言語で開発する場合は、自分でAppManifest.xamlへの記述とxapファイルへのアセンブリをパッケージングする必要があります。後は、使用される動的言語によって追加したアセンブリに対する参照を記述するれば、スクリプトの中から使用することが可能になります。

 #IronPython
import clr
clr.AddReference(アセンブリ識別子かアセンブリ名)
import文かfrom -- import 文で参照を行う
 #IronRuby
require 'アセンブリ識別子'

上記のように参照を行うことで、スクリプトの中から自由に参照したアセンブリを使用することができるようになります。ちなみに、アセンブリ識別子とは「System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e」という形式のことです。

最後に添付のapp.pyは、最初にご紹介したDLR Consoleのキーマッピングを日本語キーボード用に変更(TextInputHandlerクラス)したものです。ライセンスは、Silverlight Dynamic Language SDKがMS-PLですので、それに準拠したご使用をお願いいたします。

app.py