ページ

2006年2月9日木曜日

WinFX Dec 2005 CTP を VS2005 日本語版に入れてみる - 再び玉砕(笑)

# 1ヶ月半ほど放置しちゃってましたが、ちょっと復活


12月後半の話ですが、Visual Studio 2005 日本語版 (正式版) が入ってる環境に WinFX Dec 2005 CTP を入れてみました (Jan 2006 CTP ではありません)。入れたのは以下のものです。



■ Windows SDK のセットアップで発生するエラー
Windows SDK をセットアップしようとするとすぐにエラーが発生してセットアップが終わってしまいます。エラーの内容として表示されるのは 「Windows SDK could not be configured, see the 'Installing the SDK' section of the Samples\Setup\HTML\ConfigDetails.htm document for more information.」 というものでさっぱり意味がわかりません (^^; いろいろ情報を探してみると、どうも .NET Compact Framework 2.0 が入っているとダメな模様。コントロールパネルの 「プログラムの追加と削除」 でいったん .NET Compact Framework 2.0 を削除してやると問題なく Windows SDK をセットアップすることができました。


■ WPF は動かず
WPF を使用しているサンプルを動かそうとすると例外が発生して動きませんでした。発生する例外は System.Windows.Serialization.BamlParseException で、これは Nov CTP のときといっしょです。ググってみると
Bad install of WPF?
こんな記事を発見。この記事は MSDN Product Feedback の 「BamlParseException when running WPF application」 へのコメントで、どうやら WPF のランタイムは起動時に GAC のアセンブリをロードしていて、そのときに例外が出るとダメっていうことみたいです。


ところで、VS2005 で WPF アプリを動かして例外の詳細を調べても BamlParseException だということしかわかりません。上記のフィードバックでは BamlParseException の原因となった CustomAttributeFormatException について書かれています。どうやったらこの例外が原因だとわかるのかすぐにはわかりませんでした。VS2005 のメニューの 「ツール」-「オプション」の 「デバッグ」-「全般」 の 「'マイコードのみ' 設定を有効にする」 のチェックをはずすとランタイム内部で例外が発生したときもブレークしてくれるようになります。
これで実行してみると、確かに BamlParseException の前に CustomAttributeFormatException が発生していてスタックトレースは


  mscorlib.dll!System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments(System.Reflection.ConstArray attributeBlob, ref System.Reflection.CustomAttributeCtorParameter[] customAttributeCtorParameters = {次元:[1]}, ref System.Reflection.CustomAttributeNamedParameter[] customAttributeNamedParameters = {次元:[3]}, System.Reflection.Module customAttributeModule) + 0x7b バイト 
  mscorlib.dll!System.Reflection.CustomAttributeData.CustomAttributeData(System.Reflection.Module scope, System.Reflection.CustomAttributeRecord caRecord) + 0x3b7 バイト 
  mscorlib.dll!System.Reflection.CustomAttributeData.GetCustomAttributes(System.Reflection.Module module = {Microsoft.JScript.ja.resources}, int tkTarget) + 0x4f バイト 
  mscorlib.dll!System.Reflection.CustomAttributeData.GetCustomAttributes(System.Reflection.Assembly target) + 0x3a バイト 
  PresentationFramework.dll!System.Windows.Serialization.XmlnsCache.EnumerateXmlnsAttributes(System.Reflection.Assembly assy = {Microsoft.JScript.resources, Version=7.0.3300.0, Culture=ja, PublicKeyToken=b03f5f7f11d50a3a}, bool isUserCache = true) + 0x24 バイト
(以下略)


となってました。
試しに WPF とは関係ない普通のプロジェクトを VS2005 で作って、


Assembly asm = Assembly.Load("Microsoft.JScript.resources, Version=7.0.3300.0, Culture=ja, PublicKeyToken=b03f5f7f11d50a3a");
IList<CustomAttributeData> c = CustomAttributeData.GetCustomAttributes(asm);


とやってみると確かに CustomAttributeFormatException が発生します。
いちおう、BamlParseException が発生する原因はわかりましたが GAC に入っているものを消しまくるわけにもいかないので、WPF ランタイムが対処してくれないことにはどうしようもなさそうです。


って、MSDN Product Feedback には 「Feb CTP で直る」 と書いてありますから、それ待ちですね。

0 件のコメント:

コメントを投稿