BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース .NET 4.5で予定されている互換性のない変更

.NET 4.5で予定されている互換性のない変更

原文(投稿日:■)へのリンク

.NET 4.5アセンブリの本当のバージョン番号は、4.0.30319である。これを見慣れているとしたら、それは.NET 4.0のバージョン番号と同じからである。開発者が非常に残念なのが、マイクロソフトは、コアアセンブリを「インプレース」でアップデートすることである。ユーザーが実際にインストールしている.NETのバージョンを特定するのが非常に困難になったり、.NET 4.0と4.5がインストールされたマシンをターゲットにした開発者に多くの落とし穴を作ることになる。

Visual Studioは、.NET 2.0を対象にしたプロジェクトで.NET 3.0や3.5のアセンブリを誤って使用した開発者に対して、個別のメソッドについては、これまで通りなにも言ってはくれない。IDEについては、mscorlib.dllやSystem.dllのような一般的なライブラリで、以前のバージョンには存在していなかったメソッドには警告を出さない。静的コード分析で誤りをプログラム的にチェックする場合を除き、実行時にコードが失敗するまでは、エラーであることが検出されないだろう。.NET 3.5のリリース時にサービスパックを通じて追加されたEventWaitHandle.WaitOneのオーバーロードがよい例である。

今回も説明が必要な.NET 4.5の互換性のない変更が行われており、理論的にこのような問題が存在している。

未処理、未監視の例外

.NET 2.0では、意味的な未処理例外が変更された。このバージョンより前のUIのないスレッドの例外は、単純に破棄されて、関連するスレッドが終了していた。.NET 2.0では、未処理の例外は、アプリケーション全体をクラッシュさせるようになった。 これによりデータの欠損や検出できないエラーが大幅に削減されたが、これはまたすべてのバックグランドスレッドはトップレベルの例外ハンドラで処理されることを意味することになった。

Task Parallel Libraryは、このモデルに従って提供されている。もしTaskが失敗した場合、Taskがガベージコレクションに回収される前にそのExceptionプロパティを読まなくてはならない。そうしないと、未処理例外が発生したことになり、ファイナライザがアプリケーションを終了させてしまうことになる。

.NET 4.5では、Taskのルールが2.0以前のスレッドに似た形に変更された。ログ出力の目的で、グローバルイベントが発生するが、Taskが失敗しても、アプリケーションはクラッシュしない。

System.Net.PeerToPeer.Collaboration

System.Net.PeerToPeer.Collaboration名前空間は、なんの説明もなく提供されなくなっている。

これらのライブラリは、サーバー以外のWindows VistaとWindows 7のみで提供されており、Windows Peer-to-Peer基盤を拡張している。レアな技術のサブセットで、レアにしか使われておらず、ほんの少しの情報情報が存在しているだけで、一握りの開発者に影響を与えるだけである。

WCF

maxRequestLengthとmaxReceivedMessageSizeクオートを超えた時のHTTPステータスコードが400 (Bad Request)から413 (Request Entity Too Large)に変更されている。

WPF

TextBoxBase.UndoLimitのデフォルト値が-1 (無制限)から100に変更されている。なんの説明もないが、おそらくこれによりテキストボックスのコンテンツに無制限のバージョンを保持するよりもパフォーマンスがよいだろう。

XML/XSLT

LoadOptions.SetLineInfoがLoadメソッドを通過したときにXDocumentから行番号と位置を含むバリデーションエラーがスローされる

System.Xml.Xsl.XslCompiledTransformクラスの互換モードが修正された。

この記事に星をつける

おすすめ度
スタイル

BT