マイクロソフトは、.NET Framework 3.5 SP1から.NET 4.0へのマイグレーションに関する完全な課題のリストを公開した。リストには、次の6個の領域が含まれている。Core、ASP.NET、ADO.NET、WCF、WPF、XML。
.NET Framework 4.0が同じマシン上にインストールされていたとしても、2つのフレームワークは、平行してお互いに連動することがないため、.NET 3.5用にコンパイルされた.NETアプリケーションに問題が発生することはない。しかし、.NET 4.0用に再コンパイルした場合、マイクロソフトの最新のランタイムは互換性のない変更による影響を受けるが、いくつかの拡張による恩恵を受けることもできる。
以下の6個の領域に対する変更
変更のリストが長いため、すべてをカバーすることはできないが、いくつかを紹介しよう。
Core
アプリケーションの構成ファイル名の変更された。 | 「もしアプリケーションの構成ファイルがapplication-name.configという名前の場合、application-name.exe.configという名前に変更する。たとえば、renameMyApp.configをMyApp.exe.configとする。」 |
コードアクセスポリシーがオフに変更された。 | コードアクセスセキュリティポリシーの互換性と移行を参照 |
ASP.NET
CASポリシーの変更によりグローバルキャッシュの信頼済みコードで実行しているアプリが、失敗する可能性がある。 | ASP.NET 4アプリケーションのコードアクセスセキュリティを参照。 |
ASP.NET 4.0がインストールされた後、IIS 6.0上にインストールされたASP.NET 2.0アプリが、エラーを出力する。 | ASP.NET 4.0を無効にするか、ASP.NET 2アプリをASP.NET 4がインストールされていないIISインスタンスに移動する。 |
ASP.NET 4.0のページパーサは、厳格である。 | 不正なマークアップが修正されないとエラーが出力される。 |
Data
ストリーム | 「WCF Data Servicesは、読み書き操作のためのストリームを長時間クローズしない。」 |
イベント | 「System.Data.Linq.EntitySet(Of TEntity)コレクションは、 EntitySet(Of TEntity)が、アンロードされた時に加えて、コレクションがロードされたときに、追加と削除の操作次に発行されるListChangedイベントを発行する。」 |
クエリ | 「Skip(0)は、LINQ to SQLクエリで無視されなくなる。このメソッドを使用したクエリの結果が異なる可能性がある。Skip(0)には、OrderBy句が必要で、OrderBy句が含まれない場合、NotSupportedException例外がスローされるようになる。」 |
WCF
構成ファイル | WCFは、構成ファイルをまたいだ結合をサポートする。 |
サービスホスティング | 「要素の定義にallowDefinition="MachineToApplication"属性を追加することによって、<serviceHostingEnvironment>要素を明示することができなくなった。
サービスレベルの<serviceHostingEnvironment>要素を明示することは、正式には正しくなく一貫性のない振る舞いを引き起こすことになる。」 |
WPF
例外ハンドリング | 「WPFは、重大な例外(NullReferenceException、OutOfMemoryException、StackOverflowException、SecurityExceptionなど)をInnerExceptionプロパティに保持して、TargetInvocationException例外をスローするため、元の例外をキャッチする必要がなくなり、エラーを検出しやすくなる。」 |
ウィンドウスタイル | 「AllowsTransparencyがtrueで、WindowStateが最小化(Minimized)の時に WindowStyleにNoneをセットするとInvalidOperationExceptionがスローされる。」 |
ダイアログボックス | 「信頼性を向上させるためにCommonDialog.ShowDialogメソッドは、同一スレッドでMicrosoft.Win32.FileDialogコントロールを作成する。」 |
XML
Namespaceリゾルバ | 「XmlReader.ReadContentAs メソッドは、IXmlNamespaceResolverリゾルバに引き継がなくなる。」 |
Whitespace | 「XmlReader.Createメソッドは、リーダを作成する際のデータの損失を防ぐために、空白を削除することをしなくなる。」 |