ページ

2006年2月24日金曜日

WinFX Feb 2006 CTP の WPF、WCF の変更点など

February CTP of WinFX Published -- Breaking Changes
WPF の大きな変更点 (Breaking Change) が 13個紹介されています。


Wpf Xaml Namespace Update Tool for Feb2006 CTP
XAML のネームスペースなどを Feb 2006 CTP のものに修正してくれるツールが紹介されています。


Breaking changes for the Feb CTP
WCF の大きな変更点 (Breaking Change) が 2つ紹介されています。


WinFX February CTP is released!
WCF の大きな変更点 (Breaking Change) が 1つ紹介されています。


WCF Feb CTP namespace changes
こちらも WCF の大きな変更点。


http://windowscommunication.net/collateral/pages/BreakingChangesJanCTPToFebCTP.htm
WCF の Jan 2006 CTP から Feb 2006 CTP の間の Breaking Changes。


Updated Bag-O-Tricks for WinFX Februrary CTP
WinFX Feb 2006 CTP で動くように修正した WPF のサンプルがあります。


WinFX Feb CTP is available
「新しい Expression のビルドもすぐに入手できるようになる」 とかって書かれてます。

WinFX Feb 2006 CTP - ついに WPF が動いた(笑)

WinFX Feb 2006 CTP が出たそうですので、例の WinFX Dec 2005 CTP の WPF が動かなかった環境に入れてみました。


Pre-released WinFX Runtime Components Uninstall Tool
まずはこれを使ってアンインストールしてみました。
おぉ、このアンインストールツールはちゃんと日本語化されてます。って、あれ?どうも WinFX Dec 2005 CTP はちゃんと消してくれたようですが、SQL Server 2005 Express や Visual Studio 2005 に付いてる MSDN Library まで消されちゃったみたいです。それに Windows SDK Dec 2005 CTP は消されずに残ってるみたい。うーむ。仕方ないので、SQL Server 2005 Express とかを入れなおして、消しといたほうがよさそうなものを手動でアンインストール。


Microsoft Pre-Release Software WinFX Runtime Components - February Community Technology Preview (CTP)
続いて WinFX Feb 2006 CTP のインストール。英語版のセットアップもちゃんと日本語表示になってました。
おっ、ちゃんと ドイツ語日本語 の Language Pack が用意されています。それになにげに 「日本語」 にしてみたらちゃんと 日本語のページ も用意されていますし、リリースノート (Readme) も 英語 だけでなく 日本語 も用意されているようです。
で、WinFX Feb 2006 CTP と日本語 Language Pack を入れたところでちゃんと WPF が動いてるのかテスト。とっても単純な下記の内容だけの test.xaml ファイルを作ってダブルクリック。おぉ、ちゃんと表示された!自分のマシンで WPF が動いてるの初めて見たよ(^^;


<Canvas xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
              xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml>
    <Rectangle Canvas.Left="100" Canvas.Top="100" Width="200" Height="100" Fill="blue" />
    <Ellipse Canvas.Left="150" Canvas.Top="50" Width="200" Height="100" Fill="red" />
</Canvas>


Microsoft® Windows Software Development Kit (SDK) for the February 2006 Community Technology Preview (CTP) for Windows Vista and WinFX Runtime Components
WPF も動いたし、 Windows SDK をインストール。
iso イメージだけでなく、インターネット経由でセットアップする setup.exe も用意されているようです。私は iso イメージでインストールしました。Dec 2005 では .NET Compact Framework が入ってるとセットアップがエラーで止まっちゃうとかありましたが、今回は特に問題なく完了。
さっそく C:\Program Files\Microsoft SDKs\Windows\v1.0\samples にある AllWinFXsamples.zip を解凍して WPF のサンプルを動かしてみよう、、、って、XAML の namespace とかが古いままでここに入ってるサンプルは Feb 2006 CTP じゃ動かないじゃん。


Microsoft Visual Studio Code Name “Orcas” Community Technology Preview - Development Tools for WinFX
Orcas (というか Cider) も入れなきゃ。(まだ入れてない)


Microsoft® Visual Studio® 2005 Extensions for Windows Workflow Foundation Beta 2
WWF の Extension。これもまだ入れてない。
お?これも 「日本語」 を選んでみたらちゃんと 日本語ページ になって、ファイル名も Beta 2(JA) になってるけど、これは WWF の Extension が日本語化されてるってことなのかな?

VS2005 で VSS6 は使えるのか?

Can Visual Source Safe 6.0 be used with VS 2005? より


VS2005 で VSS6 は使えるのか?また、VSS6 と VSS2005 の違いは?などについて
http://alinconstantin.homeip.net/webdocs/scc/Vss6Vs2005.htm
こちらにまとめられている、と紹介されています。
(この Alin さんも Microsoft の人のようですが)


で、VS2005 からは VSS6 も VSS2005 も問題なく使えるということみたいです。

VB 9.0 の XML 機能で namespace を使う

VB 9.0 Xml features - Xml namespaces example より


VB 9.0 ではコード中に XML をそのまま書けるようになりますが、上記の記事は 「namespace を使いたいときはどうするの?」 という質問への回答だそうです。


ふむ、Imports で namespace をインポートするっていうところだけが VB っぽいだけで、XML での namespace の指定はごく普通にやればいいのか。
おそるべし、VB9。

ASP.NET RSS Toolkit

ASP.NET RSS Toolkit より


ASP.NET で RSS を扱うクラスライブラリが公開されています。
主な機能は、



  • ASP.NET アプリ上で RSS フィードの内容を表示するための RSS Data Source コントロール。

  • RSS フィードのメモリ上やディスク上でのキャッシュ

  • RSS フィードから強く型付けされたクラスを生成するためのツール

  • ASP.NET アプリで RSS フィードの生成をサポート

といった感じみたいです。


また、
Awesome ASP.NET 2.0 RSS Tool-Kit Released
こちらでもう少し具体的に Visual Studio 上でどんな感じで使えるのかといった紹介がされています。

2006年2月22日水曜日

C# 3.0 の 型フィルタ Extension Method

以前に書いた C# 3.0 の Extension Method と Lambda Expression に daigoh さんよりすばらしいコメントを頂きました。ありがとうございます。(埋もれちゃうともったいないので記事としてポスト)


なるほど、OfType<T> なんてものがあるんですね。
Standard Query Operator にどんなものがあるのか一通り見てみないといけないなぁ。(まぁ、まだいろいろと変わったりするんでしょうけど)

2006年2月20日月曜日

WPF で Windows.Forms なコントロールを使う

"Crossbow" - Windows Forms and Windows Presentation Foundation Interoperability


WPF と Windows.Forms は本質的に別の技術です。なので、WPF な画面に Windows.Forms なコントロールを置くことは (そのままでは) できません。たとえば、Windows.Forms のボタンである System.Windows.Forms.Button は WPF な画面上には置けないわけです (ちなみに WPF のボタンは System.Windows.Controls.Button です)。


しかし、Windows.Forms に ActiveX コントロールを使う仕組みがあるように、WPF にも Windows.Forms なコントロールを使う仕組みがあります。それが、WindowsFormsHost クラスで、上記の MSDN TV はこのクラスのデモです。


って、この MSDN TV を見て初めて WPF で Windows.Forms なコントロールを使えるっていうのを知ったんですけど。なので、WindowsFormsHost がどこまで互換性があるのか、データバインディングとかはどうなるのか、とか詳しいことはぜんぜんわかりません(^^;

2006年2月17日金曜日

WPF におけるコマンドパターン

The Command Pattern In Windows Presentation Foundation


WPF のコマンドパターンの解説です (英語)。
まだ読んでない。しかし、WPF に 「コマンド」 という概念があること自体しらなかった orz

2006年2月16日木曜日

XBOX 360 のコントローラを Windows Forms で使う

MDX: XBOX 360 Controller Windows Forms Application より


XBOX 360 のコントローラを Windows Forms + Managed DirectX で使う、という 解説記事 です。って、私は XBOX 360 なんて持ってませんが(^^; なんとなく気になったので覚え書き。

Yahoo! 製の Ajax な UI コントロール

Nice Free AJAX Library from Yahoo! より


Yahoo! UI Library という Yahoo! 製の Ajax な UI コントロール集が紹介されています。どんなものがあるかは、Yahoo! UI Library からたとえば "Animation" に行って一番下の方にある Examples を見ると実際に動いているところを見ることができます。


しかし、まったく知らなかったんですが http://developer.yahoo.net/ っていろいろとおもしろそうなものがありますね。

Managed Spy

Deliver The Power Of Spy++ To Windows Forms With Our New Tool


MSDN Magazine 英語版の記事です。(って、実はまだ記事はまったく読んでないんですが(^^; )
上記記事のスナップショットを見れば一目瞭然ですが、名前のとおり Managed なアプリ用の Spy++ です。そのアプリがどんなコントロール (System.Windows.Forms.Button とか System.Windows.Forms.TextBox とかそういうやつ) で作られているのか見ることができます。また、たとえばボタンを選択しておいて 「Start Event Logging」 ボタンを押せばどんなイベントが発生しているか見ることができます (Window メッセージではなく、Managed なイベントです)。
激しくイイ!かも。


上記の記事からダウンロードして実行すると解凍されます。ソースとそれをコンパイルした exe、dll が入っています。ソースは GUI 部分が C# で、dll 部分は C++/CLI で書かれているようです。


■注意■
ManagedSpy.exe を起動すると、.NET Framework 2.0 にしか対応していないにも関わらず、1.1 ランタイムにもちょっかいを出しにいくようです。その結果、1.1 で動いているアプリは軒並み死にます(^^; 私は、SharpReader とかいくつかの 1.1 アプリを常時起動しているんですが、それらが全部死んじゃいました。また、Word 2003、Excel 2003 も死にます。十分注意してください。


で、確認したわけではないんですが、この現象は NyaRuRuの日記: ■[.NET]混合モード DLL の直接ロード このためなんだろうと思います。

2006年2月15日水曜日

WinFX Feb 2006 CTP はもうすぐ?

Wpf Xaml Namespace Update Tool for Feb2006 CTP より


「Feb 2006 が出るとき、すべての xaml ファイルにいくつかの変更が必要になる。



  1. "http://schemas.microsoft.com/winfx/avalon/2005" が "http://schemas.microsoft.com/winfx/2006/xaml/presentation" に変わる。

  2. "http://schemas.microsoft.com/winfx/xaml/2005" が "http://schemas.microsoft.com/winfx/2006/xaml" に変わる。

  3. マッピング用の PI (<?Mapping ClrNamespace="MyNS" XmlNamespace="local" Assembly="MyAssembly" ?> ) はマッピング PI は必要なくなり新しい URI のシンタックスに置き換えられる。

  4. その他...

コンバートするためのツールをリリースする予定」


WPF は CTP が出るたびに結構あちこち変更されていますが、今回もいろいろ変わりそうな感じです。
まだ、今の時点では Feb 2006 CTP は出てませんが、
Uninstall Tool for WinFX Runtime Components 3.0 Beta 2 Feb 2006 CTP
によると 「最新の WinFX Feb 2006 CTP のためのアンイストールツールがリリースされた」 ってことで、なぜかアンイストールツールだけリリースされてます(^^;


アンインストールツールが出てきたってことはもうすぐなのかなぁ?と思ったんですが、
When will the Windows SDK Feb CTP be live, anyway?
によると、まだ Windows SDK Feb 2006 CTP のリリース日はまだ流動的みたいです。今までと同様に Windows SDK と WinFX などは足並みをそろえてリリースされるんでしょうから、もうちょっと先なのかもしれません。

Managed Stack Explorer

Managed Stack Explorer


セットアップはダウンロードして解凍して MSE.exe を適当なフォルダに放り込むだけ、だそうです。
そして、MSE.exe を起動するとすでに起動しているマネージドなプロセスが一覧表示されます。どれかのプロセスをダブルクリックするとスレッドが一覧表示されます。どれかのスレッドをダブルクリックするとその時点でのスタックトレースが表示されます。また、GUI だけでなくコマンドラインでも操作できるようになっています。


デバッガ上で動かしているわけではないのにスタックトレースが見れるのはおもしろいですね。ただ、今のところどんなときに使うと便利なのかよくわかんないんですが(^^; 

2006年2月13日月曜日

IE チームからのおもしろビデオ

Funny Video From IE Team より


IE 7 の CM です。セリフとかはなく映像で見せる CM なので英語の心配をしなくても意味はわかりました。。。が、IE 7 ってそんなに便利なのか?(笑) (最後のところで 「毎日の作業をより簡単に」 みたいなことが表示されるので、別に IE 7 でこれらのことができると言ってるわけではありませんが(笑))

MSBee - .NET Framework 1.1 アプリのビルドに MSBuild を使う

MSBuild Extras - Toolkit for .NET 1.1 "MSBee"


.NET Framework 1.1 アプリをビルドするときに MSBuild を使えるようにするツールキットだそうです。


Readme.doc をざっと見ただけですが、中身は .NET 1.1 の C#・VB.NET 向けの .targets ファイルとちょっとしたタスクを追加するための MSBee.dll とのこと。今のところ純粋に 「MSBuild で .NET 1.1 の C#・VB.NET コンパイラを呼び出せるようにする」 という目的のもので、VS2005 で .NET 1.1 アプリがビルドできるようになるとか、そういうものではないようです。(というか、Readme.doc の 7. FAQ のところに 「今のところ VS2005 IDE をサポートする予定はない」 とはっきり書かれてます(^^; )

RSS API を使った Podcast ソフト

WinCast: A podcast receiver built-on the Windows RSS Foundation. より


RSS の購読や取得、メンテナンスなどは IE 7 にまかせて、取得した RSS に書かれている mp3 ファイルの URL を RSS API で取り出してダウンロードしてやれば Podcast ソフトの出来上がり、ということかな?


(IE 7 を入れる環境がないので試せないんですが)

2006年2月10日金曜日

HTML 内のクライアントサイドスクリプトを VS2005 でデバッグ

Script Debugging with Visual Studio より


HTML 内のクライアントサイドスクリプト (JavaScript や VBScript など) をデバッグするには (ローカルにある HTML ファイルの場合)



  1. IE のメニュー 「ツール」-「インターネットオプション」-「詳細設定」-「ブラウズ」 のところにある 「スクリプトのデバッグをしようしない (Internet Explorer)」 のチェックをはずしておく。

  2. Visual Studio 2005 を立ち上げる。

  3. HTML ファイルを開く。

  4. スクリプト上にブレークポイントを仕掛ける。

  5. IE で HTML ファイルを開く。

  6. VS2005 のメニュー 「デバッグ」-「プロセスにアタッチ」 で 5 で開いた IE にアタッチする。

とやればいいようです。
上記の blog では F5 / デバッグ開始 や F10・F11 / ステップ実行ができるように書いてありますが、単に HTML ファイルを読み込んだだけではこれらは有効になりませんでした。なので、上記のように別プロセスの IE にアタッチしてやる必要がありました。


また、ローカルではなくネット上のスクリプトの場合は、



  1. VS2005 のメニュー 「表示」-「その他のウインドウ」-「Web ブラウザ」 でブラウザを開き、目的の URL を開く。

  2. VS2005 内のブラウザ上で右クリックして 「ソースの表示」 をする。

  3. 表示されたソース上のスクリプトにブレークポイントを仕掛ける。

  4. IE を立ち上げて目的の URL を開く。

  5. VS2005 のメニュー 「デバッグ」-「プロセスにアタッチ」 で 4 で開いた IE にアタッチする。

とやるとできました。


また、関連しそうな情報が
方法 : クライアント側スクリプトのデバッグを有効にする
にあります。(これは ASP.NET のデバッグ中にクライアントサイドスクリプトをデバッグする方法のことみたいです)


しかし、VS2005 って XSLT のデバッグもできるし、なんでもできるんだな。
ちなみに、XSLT のデバッグは



  1. XSLT のファイルを開く。

  2. プロパティウインドウの 「入力」 「出力」 を適当に指定。

  3. 適当にブレークポイントをセット。

  4. メニュー 「XML」-「XSLT をデバッグ」 でデバッグ開始。

こんな感じ。

Borland が IDE 部門売却?

Borland Leaves IDE Business より


eWeek – Borland to Divest Tools with Segue Buyout
が紹介されています。なにやら、IDE 部門を売るようなことが書かれてるみたいです。これは Borland がもはや Delphi、C++ Builder、C# Builder、JBuilder、Kylix、InterBase を売らないであろうことも意味する、とかなんとか。そりゃ、大ニュース!日本語のニュースはないのか?(^^;


@IT - 米ボーランドがIDE事業を売却、「Delphi」はどこへ
ありました。

C# から VB にコードを変換する VS2005 アドイン

A Visual Studio Add-In That Converts C# Code To Visual Basic


MSDN Magazine (英語) の記事です。
ConvertCSharp2VBCodeTranslator といった C# から VB へのコード変換を行ってくれる Web や Web Service があります。これを呼び出して C# から VB にコードを変換する VS2005 アドインを作ってみましょう。という記事みたいです。


って、記事はほとんど読んでないんですが、コードもダウンロードできるので試してみました。
ダウンロードしたファイルには PasteAsVBSetup.msi なんかも含まれていますが、これでセットアップしてもうまくいきませんでした。なので、C:\Documents and Settings\USERNAME\My Documents\Visual Studio 2005\Addins に



  • PasteAsVB.dll

  • PasteAsVB.dll.config

  • PasteAsVBAddIn.AddIn

  • PasteAsVBAddIn.dll

をコピーして VS2005 を起動してやると、メニューの 「ツール」-「アドイン マネージャ」 に "PasteAsVBAddin" が現れました。
で C# のコードをコピーして 「編集」-「Paste As Visual Basic」 してやるとダイアログが表示されて VB に変換できました。(ただ、Kamal Patel's Converter のほうは動きませんでしたが)


アドインというより、コンバートに使っている Web Service 次第なわけですが、単純なコードはそれなりに変換できました。

Anders Hejlsberg のインタビュービデオ

Life and Times of Anders Hejlsberg


Anders Hejlsberg のインタビュービデオです。当然英語ですし transcript もないので何を言ってるのか私にはほとんどわかりませんが(泣)


ちなみに、このビデオは技術的なことを語っているというものではありません。「徹子の部屋」 みたいな感じです。

Microsoft Feeds API

Microsoft Feed API documentation より


 Microsoft Feeds API が紹介されています。文字通り RSS フィードをごにょごにょする API なようです。どうやら IE 7 に搭載される RSS 機能は IE 7 に閉じたものではなく、こういった API を通して操作できるものになるようです。


リファレンスを見ると完全に COM です。上記 blog にも 「なんでマネージドじゃないんだ?いまだに C++ 使ってるやついる?」 みたいなコメントがついてますが 「もちろんマネージドも提供されるよ。たぶん WinFX の一部としてね」 なんていう返事が返されてます。

C# 3.0 の Extension Method と Lambda Expression

Neighbourhood super-hero LINQ comes to the rescue より


object[] list = { 1, 2, "abhinaba", 5f, "basu" };

 

foreach( var v in list.Where(x => x is string))

{

Console.WriteLine(v);


いい感じです。
ところで、この場合の var の型は何になるんでしょう?「x is string」 を評価した結果は string にしかなりえないからちゃんと string になるんでしょうか?それとも x は object だから var も object になるんでしょうか?

Hello World (DynamicILInfo 版)

Hello World with DynamicILInfo より


C# 上で IL を直にごにょごにょして Hello World (^^;

C# 用コードスニペット集

Visual Studio 2005 Code Snippets
http://msdn.microsoft.com/vstudio/downloads/codesnippets/


C# 用のコードスニペットがたくさんダウンロードできます。
"Application Code Snippets" などの各リンクからは VSI がダウンロードできるようです。これをダウンロードしてダブルクリックすればどこに入れるか聞かれてスニペットを追加できます。
"click here" のリンクからはすべてのスニペットが入った MSI がダウンロードできます。これをダウンロードしてダブルクリックすれば解凍できます (デフォルトだと C:\Documents and Settings\USERNAME\My Documents\MSDN\Visual C# 2005 Code Snippets )。解凍後、VS2005 のメニューの 「ツール」-「コード スニペット マネージャ」 の 「追加」 ボタンでフォルダを指定すればまとめてスニペットを追加できます。


さっそく入れてみましたが、、、数が多すぎてどれがどんなものなのやら、、、(^^;

Visual Studio の Automation サンプル

Automation Samples for Visual Studio
http://msdn.microsoft.com/vstudio/downloads/code/automation/default.aspx


Visual Studio を Automation で操作するサンプルコード集です。VS.NET 2002、2003、2005 のそれぞれがあります。2005 の中身をちょっと見てみましたが、C# で書かれているもの、VB で書かれているもの、C#・VB の両方のソースがあるものがあるみたいです。

2006年2月9日木曜日

windowscommunication.net、windowsworkflow.net

http://windowscommunication.net/
http://windowsworkflow.net/


まぁ、ドメイン名を見ればわかると思いますが、前者が Windows Communication Foundation (WCF) のサイト、後者が Windows Workflow Foundation (WWF) のサイトです。どちらも Microsoft が運営しているようです。


http://windowspresentation.net/ はまだ何にもないみたい。
# けど、windowspresentation.net を whois で見ると所有者は Microsoft になってる。
# さすが、抜け目ないな(^^

Paint.NET Language Pack (日本語版)

ずいぶん前に紹介 した Paint.NET ですが、かなりバージョンも上がってるし、いつの間にか日本語 Language Pack も出てたのであらためて入れてみました。


■ Paint.NET について
Paint.NET は、C# で作られたペイントソフトです。ソースも公開されています。Version 2.5 は .NET Frmamework 1.1 用、Version 2.6 は .NET Framework 2.0 用みたいです。(ただし、2.6 はまだ RC 1)


■ Paint.NET を入れてみる
まずは、ダウンロードページ からダウンロードしてセットアップ。単にダウンロードした exe を実行するだけ。セットアップの時点では英語とドイツ語しか選択できないので、とりあえず英語で。なお、今回は 2.6 RC1 にしました。


次に Japanese の Language Pack をダウンロード。こちらは zip ファイルなので、Paint.NET をセットアップしたフォルダ (デフォルトでは C:\Program Files\Paint.NET ) にフォルダなどもそのまま解凍します。具体的には、zip の中にある PaintDotNet.Strings.ja.resources ファイルは C:\Program Files\Paint.NET フォルダに、それ以外のファイルは C:\Program Files\Paint.NET\Resources\ja フォルダにコピーすることになります。


これで Paint.NET を起動してみるとちゃんと日本語になってました。


■ Paint.NET の使い勝手
まだ、入れてみたばかりでよくわかりません(^^;

WinDbg を使って深~いところを覗く

If broken it is, fix it you should
WinDbg を使って (主にマネージドな世界の) 深いところにガシガシ入っていく blog (^^; ちなみに、WinDbg はカーネルやドライバなどといった典型的なアンマネージドな世界のデバッギングにもマネージドな世界のデバッギングにも使える模様。


って、私は WinDbg ってほとんど知らないんですけど、使いこなせたらおもしろそうだなぁ。


最新版のダウンロードやオーバービューなどはこちら。
Debugging Tools for Windows - Overview

Mix 06

http://www.mix06.com/


2006年 3月 20日~22日にラスベガスで開催される Microsoft の新しいカンファレンスだそうです。IE7、Windows Media、Windows Live!、Atlas といった Web 関連が主でデベロッパ、デザイナー、ビジネス・プロフェッショナルを対象としているそうです。

マネージドなメソッドをアンマネージドな関数にコールバック関数として渡す

Gotchas with Reverse Pinvoke (unmanaged to managed code callbacks) より


Anonymous Method をアンマネージドなコールバック関数ポインタとして渡す例が紹介されています。
まだ、ちゃんと読んでないんですが、マーシャリングのためのすべてのマジックは CLR がやってくれるらしいです。

VS2005 のデバッガでランタイム内部で発生した例外を捕捉する

(すぐ下で書いたけど、埋もれてしまいそうなのでこれだけ抜き出し)


VS2005 のデバッガは、自分のコード内で例外が発生するとすぐに捕捉してくれますが、ランタイム内部で発生した例外はそれが自分のコードに到達したときに始めて捕捉するようです。これは、ランタイム内部に 「例外を catch して別の例外を投げる」 ようなところがあると元になった例外がわからなくて困ることがあります。(Exception.InnerException に入ってれば何も問題ないんですけどね)


そんなときは、VS2005 のメニューの 「ツール」-「オプション」の 「デバッグ」-「全般」 の 「'マイコードのみ' 設定を有効にする」 のチェックをはずせば OK です。これでランタイム内部での例外発生もすぐに捕捉してくれるようになります。


(それにしても 「'マイコードのみ' 設定を有効にする」 じゃまったく意味がわかんないよ(泣) )

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 で直る」 と書いてありますから、それ待ちですね。