■
moonlightはplugin部分でどうも僕だけが動かせない罠にはまって、どうにも作業が出来ないので、System.Configurationに戻って作業することにした。とりあえず、目先のタスクがいくつかある。
まずはid:atsushieno:20070604:p2で書いた沖本さんのLocalFileSettingsProvider。これをpendingにしていた、コンパイラのバグのように見えた現象は、実は2つのSystem.dllに対する独立した参照というありえねー罠にはまっていたようだ。
2.0プロファイルのSystem.dllは、System.Configuration.dll, System.Xml.dll, System.Security.dll, Mono.Security.dllの4つと相互参照(!!)していて、最終的なSystem.dllを得るまでに、System.dllを3回ビルドすることになる。mcs/class/System 以下のソースにCONFIGURATION_DEPとかSECURITY_DEPとかXML_DEPと書いてあるものがあるのは、このためである。
1回目のビルドでは、net_2_0_bootstrapというプロファイルのSystem.dllを参照してgmcsが実行されるが、それ以降はnet_2_0プロファイルで「既にビルドされた」System.dllが使用される。このとき、ソースに含まれる型と、既にビルドされたSystem.dllに含まれる型に対する参照が、ごっちゃになってしまう。これを回避するために、monoではgmcsでアセンブリのextern aliasを使用しなければならないのだ。
まだいくつかmonoのSystem.Configuration.dllのクラス自体を修正しなければならないところがあるのだけど、そのうち機能するようになるんじゃないかな、と思う。今日もConfiguration.Save()まわりで、roaming関係がてきとーに実装されていたことに気付いたり。
もうひとつは、僕も大変お世話になっているTwitterIrcGatewayでconfigが正しく読み取れない(っぽい)問題。これはUserSettingsまわりで何かが足りていないのではないかと思うので、上記LocalFileSettingsProviderが機能するようになったら、その上位にあるApplicationSettingsBaseまわりに進めると思うので、そこから手を付けようと思っている。ていうか、さっさとutf-8を使えるようにしたいw
MonoDevelopにもVS.NETみたいな設定ファイル編集add-inを作ってみようかねえ。ApplicationSettingsBase自体、あまりおいしくない機能だという声を少なからず見るんですけど…(苦笑)