ものがたり(旧)

atsushieno.hatenablog.com に続く

System.Web.Script.Serialization

昨日、ちょっとだけ作ってみようかと邪心が芽生えたのだけど、SimpleTypeResolverの挙動が何か想定外で何か気持ち悪かったので、やめてしまったのだった。型IDは"string"とか"number"じゃないのかよ、みたいな。そしたら今日になって、やってみようかなと思っている、という人が出てきた。そんなわけで、僕自身はスタブだけ提供することにした。

クラスライブラリのスタブも勝手を知らないと面倒なのだ。

  • mcs/classやolive/classの下にアセンブリ名でディレクトリを作る。今回はSystem.Web.Extensions
  • そのディレクトリにMakefileを作る。とりあえず余所からコピーして、アセンブリ名とアセンブリ参照(-r:blah.dll)だけ変える。
  • Assemblyディレクトリを作って、その中にAssemblyInfo.csを作る。これもコピーしてアセンブリ名とバージョンと公開鍵ファイルの名前だけ変更。
  • この公開鍵ファイルがくせ者なのだけど、sn -e System.Web.Extensions.dllでMSのアセンブリから取り出せる。これは他のファイルと共通かもしれない(msfinal.pub, msfinal3.pub, winfx.pub...)。
  • クラスライブラリのネームスペースごとにディレクトリを作る。とりあえず実装する分だけでおk
  • 該当ネームスペースのディレクトリに[TypeName].csを作ってコードを書く。
  • NUnitテストには、Testディレクトリを作り、その下にネームスペースごとのディレクトリを作り、その下に[TypeName]Test.csを作って書く。
  • ソースファイルリストを作る。ls */*.cs > System.Web.Extensionsdll.sources; ls Test/*/*.cs > System.Web.Extensions_test.dll.sources

これで終わり。あとはmake, make run-testが使える。

…というわけで誰か未実装のアセンブリを実装してみません? (w