メインコンテンツまでスキップ

.NET Frameworkの互換性

.NET Framework 4以降のバージョンについてはバージョン間で非常に高い後方互換性があるので、基本的には新しいバージョンをインストールしてもアプリケーションはそのまま動作することが期待できます。これは、Windows Updateを通じてクライアント系OSに.NET Frameworkの最新バージョンを提供していることからも窺えます。

そうはいっても、ランタイムやクラスの動作でアプリケーションの動作に影響を与える変更点が存在することもあります。本記事では、これらの変更点について詳しく解説します。

バージョン間で互換性に影響がある変更点

.NET Framework 4以降のバージョンで互換性に影響がある変更点はドキュメントで詳しくまとめられています。

  • ランタイムの変更:

    アプリケーションをリビルドせずにコンピューターにインストールされている.NET Frameworkのバージョンをアップグレードした場合に影響を受ける変更点がまとめられています。新しいバージョンの.NET Frameworkをインストールした際に確認すべきドキュメントはこちらになります。

  • 変更の再ターゲット

    ターゲットフレームワークのバージョンを変更してリビルドした場合に影響を受ける変更点がまとめられています。アプリケーションのターゲットフレームワークを変更してリビルドする場合は、こちらのドキュメントを確認する必要があります。また、この場合は必然的にランタイムのバージョンも変更されるため、ランタイムの変更も確認する必要があります。

なお、ドキュメントは隣接するバージョン間でまとめられていますので、バージョンが離れている場合は、複数のドキュメントを確認する必要があります。例えば、.NET Framework 4.5から4.8にアップグレードする場合は、4.5から4.6、4.6から4.7、4.7から4.8の各ドキュメントを確認する必要があります。

更新プログラムにおける互換性に影響がある変更点

不具合に依存していた依存していたアプリケーションが不具合の修正に起因して動かなくなるといった場合もありますし、更新プログラム自体に新たな不具合が含まれる可能性もあるため、更新プログラムの適用に際して一切の検証が不要とは言い切れません。しかし、更新プログラムがアプリケーションの互換性に影響を与えることは非常に稀です。基本的には、更新プログラムの適用後もアプリケーションはそのまま動作することが期待できると考えてよいでしょう。

ただし、これまでにリリースされている更新プログラムで互換性に影響がある変更が含まれているものもありました。それらの変更は基本的にセキュリティの強化に関するもので、各更新プログラムのKBに記載されています。しかし変更の履歴がまとめられたページは見当たらず確認がなかなか大変なので、備忘録としてまとめておきます。.NET Frameworkの更新プログラムは累積的にリリースされるため、最新の更新プログラムを適用していれば、これらの変更はすべて含まれている点に注意してください。また、リリース月以降にリリースされているWindowsのバージョンでは、これらの変更はすでに適用されていますので、その点も注意してください。

リリース月変更点URL
2025年2月古いバージョンのWindowsにもGetTempPath2関数が追加されました。これに伴い、古いバージョンのWindowsでも2024年7月の.NET Frameworkの更新プログラムで変更されたSystem.IO.Path.GetTempPathメソッドの動作になります。KB5050762
2024年7月System.IO.Path.GetTempPathメソッドの動作が変更されました。
  • 従来の動作:WindowsGetTempPath関数を使用し、TEMP環境変数のパスを返します。
  • 変更後の動作:WindowsGetTempPath2関数を利用します。原則としてTEMP環境変数のパスを返しますが、SYSTEMアカウントの場合は%WINDIR%\SystemTempが返されます。GetTempPath2関数が利用できないバージョンのWindowsでは従来の動作と同じになります。
KB5039895
2023年7月System.Security.Cryptgraphy.X509Certificateクラスの動作が変更されました。
  • 従来の動作:証明書のインポートにWindowsのPXImportCertStore関数を使用します。検証もこの関数内で行われます。
  • 変更後の動作:証明書のインポートにWindowsのPXImportCertStore関数を使用する点は従来と同様ですが、関数に渡す前に.NET Framework内で追加の検証を行います。この検証は渡された証明書がリソース枯渇を招くものではないかをチェックするものですが、これに伴い従来はインポートに成功していた証明書でも、変更後はインポートに失敗する可能性があります。
KB5028851
KB5025823
2022年12月WPFアプリケーションにおけるXPSドキュメントのレンダリング処理が変更されました。セキュリティの強化のため、テーブル構造、ストーリーボード、ハイパーリンクなどの構造要素を含むXPSファイルが正常に表示されない、あるいは読み込み時にNullReferenceExceptionが発生する可能性があります。KB5020880
KB5022083
2020年9月NTLM認証を要求するサーバーからのClickOnceアプリケーションのインストール動作が変更されました。
  • 従来の動作:ゾーンに限らずClickOnceアプリケーションがインストールできます。
  • 変更後の動作:ローカルイントラネットもしくは信頼済みサイトゾーンのサーバーからのみClickOnceアプリケーションがインストールできます。その他のゾーンの場合は認証のエラーとしてインストールに失敗します。
KB4576627
2020年7月XmlSerializerクラスなどを使用したXMLのデシリアライズ処理の動作が変更されました。
  • 従来の動作:DataTableやDataSetに含まれる型で制限はありません。
  • 変更後の動作:DataTableやDataSetに含まれる型はプリミティブまたはそれに相当すると見做される型に限られ、それ以外の型が含まれる場合はSystem.InvalidOperationException例外がスローされます。
KB4566516
DataSet と DataTable のセキュリティ ガイダンス
2019年4月日本の和暦に関する書式パターンの動作が変更されました。
  • 従来の動作:書式パターンに"y年"を使用する場合に"元年"は考慮されていませんでした。
  • 変更後の動作:書式パターンに"y年"を使用する場合は和暦の1年を"元年"として扱います。
KB4489192
.NET Framework の新しい日本語時代 (年号) の更新の概要