次の方法で共有


.NET Framework 4.6.x への移行に関するランタイムの変更

この記事では、.NET Framework 4.64.6.1、および 4.6.2 で生じたアプリの互換性の問題について説明します。

.NET Framework 4.6

ASP.NET

AllowCustomPaging が true に設定された GridView では、ビューの最終ページから他に移動するときに、PageIndexChanging イベントが発生する場合がある

詳細

.NET Framework 4.5 でのバグのため、System.Web.UI.WebControls.GridView.PageIndexChanging が有効になっている System.Web.UI.WebControls.GridView に対して System.Web.UI.WebControls.GridView.AllowCustomPaging が発生しないことがあります。

提案

この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。 回避策として、アプリでは、これらの条件 (Page_Load が最終ページで、最後の System.Web.UI.WebControls.GridViewSystem.Web.UI.WebControls.GridView.PageSize と異なる) を満たす System.Web.UI.WebControls.GridView.PageSize で明示的に BindGrid を行うことができます。 または、(カスタム ページングではなく) ページングを許可するようにアプリを変更することもできます。このシナリオでは問題は発生していません。

名前 価値
範囲 軽微
バージョン 4.5
タイプ ランタイム

影響を受ける API

コア

NetDataContractSerializer を使用して .NET Framework 4.5 でシリアル化された ConcurrentDictionary は、.NET Framework 4.5.1 または 4.5.2 で逆シリアル化できない

詳細

型に対する内部的な変更のため、ConcurrentDictionary<TKey,TValue> を使って .NET Framework 4.5 でシリアル化された System.Runtime.Serialization.NetDataContractSerializer オブジェクトは、.NET Framework 4.5.1 または .NET Framework 4.5.2 では逆シリアル化できません。反対の方向 (.NET Framework 4.5.x でシリアル化して、.NET Framework 4.5 で逆シリアル化する) は動作することに注意してください。 同様に、すべての 4.x バージョン間のシリアル化は、.NET Framework 4.6 で機能します。 .NET Framework の 1 つのバージョンでのシリアル化と逆シリアル化は影響を受けません。

提案

.NET Framework 4.5 と .NET Framework 4.5.1/4.5.2 の間で System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> をシリアル化および逆シリアル化する必要がある場合は、System.Runtime.Serialization.DataContractSerializer の代わりに、System.Runtime.Serialization.NetDataContractSerializer のような別のシリアライザーを使用する必要があります。 または、この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって解決できます。

名前 価値
範囲 軽微
バージョン 4.5.1
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

AppDomainSetup.DynamicBase が UseRandomizedStringHashAlgorithm によってランダム化されなくなりました

詳細

.NET Framework 4.6 より前では、アプリの構成ファイルで UseRandomizedStringHashAlgorithm が有効になっている場合、 DynamicBase の値はアプリケーション ドメイン間、またはプロセス間でランダム化されていました。 .NET Framework 4.6 以降では、 DynamicBase は、実行中のアプリの異なるインスタンス間、および異なるアプリ ドメイン間で安定した結果を返します。 動的ベースは、引き続きアプリによって異なります。この変更により、同じアプリの異なるインスタンスのランダムな名前付け要素のみが削除されます。

提案

UseRandomizedStringHashAlgorithmを有効にしても、DynamicBaseがランダム化されないことに注意してください。 ランダム ベースが必要な場合は、この API を使用するのではなく、アプリのコードで生成する必要があります。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

インデックスの型であいまいさを解決できる場合、インデクサー プロパティで Attribute.GetCustomAttributes を呼び出すと、AmbiguousMatchException がスローされなくなりました

詳細

.NET Framework 4.6 より前では、インデックスの型によって異なるインデクサー プロパティに対して GetCustomAttribute(s) を呼び出すと、 System.Reflection.AmbiguousMatchExceptionが発生します。 .NET Framework 4.6 以降では、プロパティの属性が正しく返されます。

提案

GetCustomAttribute は現在より頻繁に動作します。 アプリが以前に System.Reflection.AmbiguousMatchExceptionに依存していた場合は、リフレクションを使用して、代わりに複数のインデクサーを明示的に検索する必要があります。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

COR_PRF_GC_ROOT_HANDLE がプロファイラーで列挙されていない

詳細

.NET Framework v4.5.1 では、プロファイル API RootReferences2() が正しく COR_PRF_GC_ROOT_HANDLE を返しません (代わりに、COR_PRF_GC_ROOT_OTHER として返される)。 この問題は、.NET Framework 4.6 以降で修正されています。

提案

この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

名前 価値
範囲 軽微
バージョン 4.5.1
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

ETW EventListeners は、明示的なキーワードを持つプロバイダーからのイベント (TPL プロバイダーなど) をキャプチャしません

詳細

空白のキーワード マスクを持つ ETW EventListeners は、明示的なキーワードを持つプロバイダーからのイベントを正しくキャプチャしません。 .NET Framework 4.5 では、TPL プロバイダーは、明示的なキーワードを提供するようになり、この問題が発生しました。 .NET Framework 4.6 では、EventListeners が更新され、この問題は修正されました。

提案

この問題を回避するには、EnableEvents(EventSource, EventLevel) の呼び出しを、使用する "any keywords" マスクを明示的に指定する EnableEvents オーバーロードの呼び出し (EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff))) に置き換えます。

または、この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

名前 価値
範囲 エッジ
バージョン 4.5
タイプ ランタイム

影響を受ける API

ペルシア暦でイスラム暦の太陽アルゴリズムが使用されるようになりました

詳細

.NET Framework 4.6 以降では、 System.Globalization.PersianCalendar クラスは Hijri ソーラー アルゴリズムを使用します。 System.Globalization.PersianCalendarと他のカレンダーの間で日付を変換すると、1800 年以前の日付 (グレゴリオ暦) の .NET Framework 4.6 以降では、若干異なる結果が生成される場合があります。また、March 21, 0622ではなく、PersianCalendar.MinSupportedDateTimeMarch 22, 0622されるようになりました。

提案

.NET Framework 4.6 で PersianCalendar を使用する場合、一部の早い日付または遅い日付が若干異なる場合があることに注意してください。 また、異なる .NET Framework バージョンで実行される可能性のあるプロセス間で日付をシリアル化する場合は、それらの値が異なる可能性があるため、それらの日付文字列を、その日付文字列として格納しないでください。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

リフレクション オブジェクトをマネージド コードからアウトプロセス DCOM クライアントに渡すことができなくなります

詳細

リフレクション オブジェクトは、マネージド コードからアウトプロセス DCOM クライアントに渡すことができなくなります。 次の種類が影響を受ける場合があります。

オブジェクトの IMarshal の呼び出しは、 E_NOINTERFACEを返します。

提案

非リフレクション オブジェクトを操作するようにマーシャリング コードを更新します。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

既定のアプリ ドメインの TargetFrameworkName が設定されていない場合、既定値が null に設定されなくなりました

詳細

System.AppDomainSetup.TargetFrameworkNameは、明示的に設定されていない限り、既定のアプリ ドメインでは以前は null でした。 4.6 以降、既定のアプリ ドメインの System.AppDomainSetup.TargetFrameworkName プロパティには、TargetFrameworkAttribute から派生した既定値が設定されます (存在する場合)。 既定以外のアプリ ドメインは、明示的にオーバーライドされない限り、既定のアプリ ドメイン (4.6 では既定では null に設定されません) から System.AppDomainSetup.TargetFrameworkName を継承し続けます。

提案

コードは、既定値の null TargetFrameworkName に依存しないように更新する必要があります。 このプロパティが引き続き null に評価される必要がある場合は、その値に明示的に設定できます。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

.NET が証明書を処理できない場合、X509Certificate2.ToString(Boolean) がスローされない

詳細

.NET Framework 4.5.2 以前のバージョンでは、詳細パラメーターに true が渡され、.NET Framework でサポートされていない証明書がインストールされている場合、このメソッドはスローされます。 これで、メソッドは成功し、証明書のアクセスできない部分を省略する有効な文字列を返します。

提案

に応じたコードは、API が以前にスローした場合に、返される文字列によって証明書データ (公開キー、秘密キー、拡張機能など) が除外される可能性があることを想定して更新する必要があります。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

データ

に解決される SQL Server データベースへの TCP/IP 接続の試行が失敗する

詳細

.NET Framework 4.6 および 4.6.1 では、に解決される SQL Server データベースへの TCP/IP 接続を試行すると、"SQL Server への接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいこと、およびリモート接続を許可するように SQL Server が構成されていることを確認します。 (プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索エラー)"

提案

この問題は修正されており、以前の動作は .NET Framework 4.6.2 で復元されています。 localhostに解決される SQL Server データベースに接続するには、.NET Framework 4.6.2 にアップグレードします。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

デバッガー

デバッガーですぐに null コアレッサー値が表示されない

詳細

.NET Framework 4.5 のバグにより、64 ビット版の Framework で実行中に代入演算が実行された直後に、デバッガーで null 合体演算で設定された値が表示されません。

提案

デバッガーでの操作に時間がかかると、ローカル/フィールドの値が正しく更新されなくなります。 この問題は .NET Framework 4.6 で修正されました。このバージョンの .NET Framework にアップグレードすれば、問題は解決します。

名前 価値
範囲 エッジ
バージョン 4.5
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

ネットワーキング

ContentDisposition DateTimes は、少し異なる文字列を返します

詳細

System.Net.Mime.ContentDispositionの文字列表現は、常に 2 桁のSystem.DateTimeの時間コンポーネントを表すように、4.6 以降で更新されました。 これは RFC822 および RFC2822に準拠するためです。 これにより、処理の時間要素の 1 つが午前 10 時より前であったシナリオでは、 ToString() は 4.6 で少し異なる文字列を返します。 ContentDispositions は文字列への変換によってシリアル化される場合があるため、 ToString() 操作、シリアル化、または GetHashCode の呼び出しを確認する必要があります。

提案

異なる .NET Framework バージョンの ContentDispositions の文字列表現が互いに正しく比較されることを想定しないでください。 可能であれば、比較を行う前に、文字列を ContentDispositions に戻します。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

シリアル化

不明な型の場合に失敗した DataContract シリアル化の例外メッセージが変更されました

詳細

.NET Framework 4.6 以降では、"既知の型" がないために System.Runtime.Serialization.DataContractSerializer または System.Runtime.Serialization.Json.DataContractJsonSerializer がシリアル化または逆シリアル化に失敗した場合に示される例外メッセージが明確にされました。

提案

アプリは、特定の例外メッセージに依存しないようにする必要があります。 アプリがこのメッセージに依存している場合は、新しいメッセージを期待するように更新するか、(できれば) 例外の種類のみに依存するように変更します。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

設定と展開

.NET Framework 4.6 以降のバージョンでの製品バージョン管理の変更

詳細

製品のバージョン管理は、.NET Framework の以前のリリースから、特に .NET Framework 4、4.5、4.5.1、4.5.2 から変更されました。 詳細な変更点を次に示します。

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full キーのVersion エントリの値が、.NET Framework 4.6 とそのポイント リリースの4.6.xxxxx、および .NET Framework 4.7 および 4.7.1 の4.7.xxxxxに変更されました。 .NET Framework 4.5、4.5.1、および 4.5.2 では、 4.5.xxxxx形式でした。
  • .NET Framework ファイルのファイルと製品のバージョン管理は、.NET Framework 4.6 とそのポイント リリースでは 4.0.30319.x の以前のバージョン管理スキームから 4.6.X.0 に、.NET Framework 4.7 および 4.7.1 では 4.7.X.0 に変更されました。 これらの新しい値は、ファイルを右クリックした後にファイルのプロパティを表示するときに表示できます。
  • マネージド アセンブリの AssemblyFileVersionAttribute 属性と AssemblyInformationalVersionAttribute 属性のバージョン値は、.NET Framework 4.6 とそのポイント リリースの場合は 4.6.X.0、.NET Framework 4.7 および 4.7.1 の場合は 4.7.X.0 です。
  • .NET Framework 4.6、4.6.1、4.6.2、4.7、および 4.7.1 では、 Environment.Version プロパティは固定バージョンの文字列 4.0.30319.42000を返します。 .NET Framework 4、4.5、4.5.1、および 4.5.2 では、バージョン文字列が 4.0.30319.xxxxx 形式で返されます (例: "4.0.30319.18010")。 Environment.Version プロパティに新しい依存関係を持つアプリケーション コードは推奨されないことに注意してください。

詳細については、「 方法: インストールされている .NET Framework のバージョンを決定する」を参照してください。

提案

一般に、アプリケーションは、.NET Framework のランタイム バージョンやインストール ディレクトリなどを検出するための推奨される手法に依存する必要があります。

Von Bedeutung

サブキー名はNET Framework Setupではなく.NET Framework Setup

  • .NET Framework 共通言語ランタイムへのディレクトリ パスを確認するには、 RuntimeEnvironment.GetRuntimeDirectory() メソッドを呼び出します。
  • CLR バージョンを取得するには、 RuntimeEnvironment.GetSystemVersion() メソッドを呼び出します。 .NET Framework 4 とそのポイント リリース (.NET Framework 4.5、4.5.1、4.5.2、および .NET Framework 4.6、4.6.1、4.6.2、4.7、および 4.7.1) では、文字列 v4.0.30319 が返されます。
名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

.NET Framework 4.6 は、レジストリに登録するときに 4.5.x.x バージョンを使用しません

詳細

予想通り、.NET Framework 4.6 のレジストリ ( HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) に設定されているバージョン キーは、'4.5' ではなく '4.6' で始まります。 コンピューターにインストールされている .NET Framework のバージョンを把握するために、これらのレジストリ キーに依存するアプリは、4.6 が新しい可能なバージョンであり、以前の 4.5.x リリースと互換性があることを理解するために更新する必要があります。

提案

.NET Framework 4.5 インストール用のアプリプローブを更新するには、4.5 レジストリ キーを探して 4.6 も受け入れます。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

Windows Communication Foundation (WCF)

SSL セキュリティと MD5 証明書認証で NETTCP を使用する WCF サービス

詳細

.NET Framework 4.6 では、WCF SSL の既定のプロトコルの一覧に TLS 1.1 と TLS 1.2 が追加されます。 クライアント マシンとサーバー マシンの両方に .NET Framework 4.6 以降がインストールされている場合、ネゴシエーションには TLS 1.2 が使用されます。TLS 1.2 では、MD5 証明書認証はサポートされていません。 その結果、顧客が MD5 証明書を使用している場合、WCF クライアントは WCF サービスへの接続に失敗します。

提案

WCF クライアントが次のいずれかの操作を行って WCF サーバーに接続できるように、この問題を回避できます。

  • MD5 アルゴリズムを使用しないように証明書を更新します。 これが推奨される解決策です。
  • バインディングがソース コードで動的に構成されていない場合は、TLS 1.1 以前のバージョンのプロトコルを使用するようにアプリケーションの構成ファイルを更新します。 これにより、MD5 ハッシュ アルゴリズムで証明書を引き続き使用できます。

Warnung

MD5 ハッシュ アルゴリズムを持つ証明書は安全でないと見なされるため、この回避策はお勧めしません。

次の構成ファイルでこれを行います。

<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding>
          <security mode= "None/Transport/Message/TransportWithMessageCredential" >
            <transport clientCredentialType="None/Windows/Certificate"
                       protectionLevel="None/Sign/EncryptAndSign"
                       sslProtocols="Ssl3/Tls1/Tls11">
            </transport>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.ServiceModel>
</configuration>
  • バインディングがソース コードで動的に構成されている場合は、ソース コードで TLS 1.1 (SslProtocols.Tls11 以前のバージョンのプロトコル) を使用するように TcpTransportSecurity.SslProtocols プロパティを更新します。

Warnung

MD5 ハッシュ アルゴリズムを持つ証明書は安全でないと見なされるため、この回避策はお勧めしません。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

Windows プレゼンテーション ファンデーション (WPF)

DataGrid の UnloadingRow イベントのハンドラーから WPF DataGrid の選択された項目にアクセスすると、NullReferenceException が発生する可能性がある

詳細

.NET Framework 4.5 のバグが原因で、行の削除に関連する DataGrid イベントのイベント ハンドラーにより、System.NullReferenceExceptionDataGrid または System.Windows.Controls.Primitives.Selector.SelectedItem プロパティにアクセスする場合に System.Windows.Controls.Primitives.MultiSelector.SelectedItems がスローされる可能性があります。

提案

この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

名前 価値
範囲 軽微
バージョン 4.5
タイプ ランタイム

影響を受ける API

項目が選択されている WPF ListBox、ListView、または DataGrid に対して Items.Refresh を呼び出すと、重複した項目が要素に表示されることがある

詳細

.NET Framework 4.5 では、System.Windows.Controls.ListBox で項目が選択されているときにコードから ListBox.Items.Refresh を呼び出すと、選択された項目がリストに複製されることがあります。 同様の問題が System.Windows.Controls.ListViewSystem.Windows.Controls.DataGrid で発生します。 これは、.NET Framework 4.6 で修正されます。

提案

この問題は、System.Windows.Data.CollectionView.Refresh() が呼び出される前に、プログラムで項目を選択解除して、呼び出しの完了後に再び選択することによって回避できます。 または、この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

価値
スコープ 軽微
バージョン 4.5
タイプ ランタイム

影響を受ける API

CoerceIsSelectionBoxHighlighted

詳細

System.Windows.Controls.ComboBoxとそのデータ ソースに関連するアクションのシーケンスによっては、System.NullReferenceExceptionが発生する可能性があります。

提案

可能であれば、.NET Framework 4.6.2 にアップグレードします。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

ObservableCollection<T>.Move に対する ListBoxItem IsSelected のバインディングの問題

詳細

項目が選択された Move(Int32, Int32) にバインドされるコレクションで MoveItem(Int32, Int32) または System.Windows.Controls.ListBox を呼び出すと、System.Windows.Controls.ListBox 項目の今後の選択または選択解除で不規則な動作が発生する可能性があります。

提案

System.Collections.ObjectModel.Collection<T>.Remove(T) ではなく System.Collections.ObjectModel.Collection<T>.Insert(Int32, T)Move(Int32, Int32) を呼び出すことで、この問題は解決されます。 または、この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

名前 価値
範囲 軽微
バージョン 4.5
タイプ ランタイム

影響を受ける API

WPF DataGrid 行ヘッダーを右クリックすると、DataGrid の選択が変更される

詳細

複数行が選択されている状態で、選択した System.Windows.Controls.DataGrid 行ヘッダーを右クリックすると、その行のみで System.Windows.Controls.DataGrid の選択が変更されます。

提案

この問題は .NET Framework 4.6 で修正されたため、このバージョンの .NET Framework にアップグレードすることによって対処できます。

名前 価値
範囲 エッジ
バージョン 4.5
タイプ ランタイム

影響を受ける API

WPF が wisptis.exe プロセスを生成し、マウスがフリーズする可能性がある

詳細

この問題は 4.5.2 から発生するようになり、wisptis.exe が生成され、マウス入力がフリーズする可能性があります。

提案

この問題はサービス リリースの .NET Framework 4.5.2 (修正プログラム ロールアップ 3026376) で、あるいは .NET Framework 4.6 にアップグレードすることで解決できます。

名前 価値
範囲 少佐
バージョン .4.5.2
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

テキスト対応コントロールの WPF スペル チェックは、OS の入力言語リストにない言語では Windows 10 では機能しません

詳細

Windows 10 で実行すると、プラットフォームのスペル チェック機能は入力言語の一覧に存在する言語でのみ使用できるため、WPF テキスト対応コントロールではスペル チェックが機能しない可能性があります。Windows 10 では、使用可能なキーボードの一覧に言語が追加されると、Windows はスペル チェック機能を提供する対応するオンデマンド機能 (FOD) パッケージを自動的にダウンロードしてインストールします。 入力言語の一覧に言語を追加することで、スペル チェックがサポートされます。

提案

Windows 10 でスペル チェックを機能させるには、スペル チェックする言語またはテキストを入力言語として追加する必要があることに注意してください。

名前 価値
範囲 エッジ
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

WPF ウィンドウは、1 つのモニターの外側に拡張するときにクリッピングなしでレンダリングされます

詳細

Windows 8 以降で実行されている .NET Framework 4.6 では、マルチモニター シナリオで単一のディスプレイの外側に拡張すると、ウィンドウ全体がクリッピングなしでレンダリングされます。 これは、1 つのディスプレイを超えて拡張された WPF ウィンドウをクリップする .NET Framework の以前のバージョンとは異なります。

提案

この動作 (クリップするかどうか) は、アプリケーションの構成ファイル内の<appSettings><EnableMultiMonitorDisplayClipping>要素を使用するか、アプリの起動時にEnableMultiMonitorDisplayClippingプロパティを設定することによって明示的に設定できます。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

.NET Framework 4.6.1

ツール

Contract.Invariant または Contract.Requires<TException> では、String.IsNullOrEmpty は純粋とは見なされません

詳細

.NET Framework 4.6.1 を対象とするアプリの場合、 Contract.Invariant の不変コントラクトまたは Requires の前提条件コントラクトが String.IsNullOrEmpty メソッドを呼び出した場合、リライターはコンパイラ警告 CC1036 を出力します。これはコンパイラ エラーではなく、コンパイラの警告です。

提案

この動作は 、GitHub イシュー #339 で対処されました。 この警告を排除するには、 GitHub からコード コントラクト ツールのソース コードの更新バージョンをダウンロードしてコンパイルします。 ダウンロード情報はページの下部にあります。

名前 価値
範囲 軽微
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

Windows プレゼンテーション ファンデーション (WPF)

ピクセルの高さが異なる項目を含むフラット リストの項目スクロール

詳細

System.Windows.Controls.ItemsControlが仮想化 (IsVirtualizing=true) と項目スクロール (ScrollUnit=Item) を使用してコレクションを表示し、コントロールがスクロールして隣接する項目と高さが異なる項目を表示すると、System.Windows.Controls.VirtualizingStackPanelはコレクション内のすべての項目を反復処理します。 このイテレーション中に UI が応答しない。 イテレーションは、以前の .NET Framework リリースでも、他の状況で発生します。 たとえば、ピクセルの高さが異なる項目が検出されたときにピクセルスクロール (ScrollUnit=Pixel) が発生し、隣接するアイテムとは異なる数の子孫項目を検出したときに、項目のスクロール階層データ ( System.Windows.Controls.TreeView やグループ化が有効な System.Windows.Controls.ItemsControl など) が発生します。項目のスクロールとピクセルの高さが異なる場合、.NET Framework 4.6.1 で反復が導入され、階層データのレイアウトのバグが修正されました。 データがフラット (階層なし) の場合は不要であり、その場合は .NET Framework 4.6.2 で行われません。

提案

イテレーションが .NET Framework 4.6.1 で発生したが、以前のリリースでは発生しない場合 、つまり、 System.Windows.Controls.ItemsControl が項目である場合、ピクセルの高さが異なる項目を含むフラット リストをスクロールする場合は、次の 2 つの解決策があります。

  • .NET Framework 4.6.2 をインストールします。
  • .NET Framework 4.6.1 用の修正プログラム HR 1605 をインストールします。
名前 価値
範囲 軽微
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

WPF スペルチェックによってスローされる ObjectDisposedException

詳細

WPF アプリケーションは、アプリケーションのシャットダウン中に、スペルチェックによってスローされた System.ObjectDisposedException によりクラッシュすることがあります。 これは、例外を適切に処理し、アプリケーションが悪影響を受けなくなったことを確認することで、.NET Framework 4.7 WPF で修正されています。 デバッガーで実行されているアプリケーションでは、不定期の初回例外が引き続き観察される点に注意してください。

提案

.NET Framework 4.7 へのアップグレード

名前 価値
範囲 エッジ
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

WPF のスペル チェックが予期しない方法で失敗する

詳細

これには、WPF スペル チェックの問題が多数含まれます。

  • WPF スペル チェックでスローされる場合がある System.Runtime.InteropServices.COMException
  • "別のユーザーとして実行" を使用してアプリケーションを起動すると、WPF スペル チェックが UnauthorizedAccessException で失敗する
  • WPF スペル チェックでは、ドイツ語の 'Hausnummer' のような複合語のスペル ミスが誤って識別されます。

提案

問題 1 - これは .NET Framework 4.6.2 の問題 #2 で修正されました。 '別のユーザーとして実行' を使用してアプリケーションを起動すると、WPF スペル チェックはサポートされなくなりました。 .NET Framework 4.6.2 以降では、この方法で起動されたアプリケーションが予期せずクラッシュしなくなります。代わりに、スペル チェックは自動的に無効になります。 問題 3 - これは .NET Framework 4.6.2 で修正されました。

名前 価値
範囲 エッジ
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

.NET Framework 4.6.2

データ

に解決される SQL Server データベースへの TCP/IP 接続の試行が失敗する

詳細

.NET Framework 4.6 および 4.6.1 では、に解決される SQL Server データベースへの TCP/IP 接続を試行すると、"SQL Server への接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいこと、およびリモート接続を許可するように SQL Server が構成されていることを確認します。 (プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索エラー)"

提案

この問題は修正されており、以前の動作は .NET Framework 4.6.2 で復元されています。 localhostに解決される SQL Server データベースに接続するには、.NET Framework 4.6.2 にアップグレードします。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

Azure SQL データベースの接続プールのブロック期間が削除される

詳細

.NET Framework 4.6.2 以降では、既知の Azure SQL データベース (*.database.windows.net、*.database.chinacloudapi.cn、*.database.usgovcloudapi.net、*.database.cloudapi.de) への接続オープン要求の場合、接続プールのブロック期間が削除され、接続オープン エラーはキャッシュされません。 接続を開く要求の再試行は、一時的な接続エラーの直後に発生します。 この変更により、Azure SQL データベースへの接続確立がすぐに再試行するされるため、クラウド対応アプリケーションのパフォーマンスが向上します。 他のすべての接続を試みる場合は、接続プールのブロック期間が引き続き適用されます。

.NET Framework 4.6.1 以前のバージョンでは、データベースへの接続時にアプリで一時的な接続エラーが発生した場合、接続プールによってエラーがキャッシュされ、5 秒から 1 分間再スローされるため、接続の試行をすばやく再試行することはできません。 詳しくは、「SQL Server の接続プール (ADO.NET)」をご覧ください。 この動作は、Azure SQL データベースへの接続時に問題となります。多くの場合、一時的なエラーが発生し、通常数秒内に回復します。 接続プールのブロック機能は、データベースが使用可能であり、アプリが数秒以内にレンダリングする必要がある場合でも、アプリがデータベースに長時間接続できないことを意味します。

提案

この動作が望ましくない場合は、.NET Framework 4.6.2 で導入された System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod プロパティを設定することで、接続プールのブロック期間を構成できます。 プロパティの値は、次の 3 つの値のいずれかを受け取ることができる System.Data.SqlClient.PoolBlockingPeriod 列挙体のメンバーです。

System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod プロパティを AlwaysBlock に設定することで、前の動作を復元できます。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

グローバリゼーション

Unicode 標準バージョン 8.0 カテゴリがサポートされるようになりました

詳細

.NET Framework 4.6.2 では、Unicode データが Unicode Standard バージョン 6.3 からバージョン 8.0 にアップグレードされました。 .NET Framework 4.6.2 で Unicode 文字カテゴリを要求する場合、一部の結果が以前の .NET Framework バージョンの結果と一致しない可能性があります。 この変更は、チェロキー音節とニュータイルー母音の記号とトーンマークに主に影響します。

提案

コードを確認し、ハードコーディングされた Unicode 文字カテゴリに依存するロジックを削除/変更します。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

安全

RSACng と DSACng は再び部分信頼シナリオで使用できます

詳細

CngLightup ( System.Security.Cryptography.Xml.EncryptedXml など、いくつかの上位レベルの暗号化 API で使用) と System.Security.Cryptography.RSACng は、完全信頼に依存する場合があります。 これには、 SecurityPermissionFlag.UnmanagedCode アクセス許可をアサートしない P/Invoke や、 System.Security.Cryptography.CngKeySecurityPermissionFlag.UnmanagedCodeに対するアクセス許可の要求があるコード パスが含まれます。 .NET Framework 4.6.2 以降、CngLightup は可能な限り System.Security.Cryptography.RSACng に切り替えるために使用されていました。 その結果、System.Security.Cryptography.Xml.EncryptedXml を正常に使用していた部分信頼アプリが失敗し、SecurityException 例外をスローし始めました。この変更により、必要とされるアサーションが追加され、CngLightupを使用するすべての関数が必要とするアクセス許可が確保されます。

提案

.NET Framework 4.6.2 でのこの変更が部分信頼アプリに悪影響を与えた場合は、.NET Framework 4.7.1 にアップグレードします。

名前 価値
範囲 エッジ
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

RSACng.VerifyHash が検証エラーに対して False を返すようになりました

詳細

.NET Framework 4.6.2 以降では、シグネチャ自体が正しく書式設定されていない場合、このメソッドは False を 返します。 検証エラーに対して false が返されるようになりました。.NET Framework 4.6 および 4.6.1 では、シグネチャ自体の形式が正しくない場合、メソッドは System.Security.Cryptography.CryptographicException をスローします。

提案

実行が System.Security.Cryptography.CryptographicException の処理に依存するコードは、検証が失敗し、メソッドが False を返す場合は、代わりに実行する必要があります。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

SignedXml と EncryptedXml の破壊的変更

詳細

.NET Framework 4.6.2 では、 System.Security.Cryptography.Xml.SignedXmlSystem.Security.Cryptography.Xml.EncryptedXml のセキュリティ修正により、実行時の動作が異なります。 例えば次が挙げられます。

  • ドキュメントに同じ id 属性を持つ複数の要素があり、署名が署名のルートとしてそれらの要素の 1 つを対象としている場合、ドキュメントは無効と見なされるようになります。
  • 参照で非正規 XPath 変換アルゴリズムを使用するドキュメントが無効と見なされるようになりました。
  • 参照で非正規 XSLT 変換アルゴリズムを使用するドキュメントが無効と見なされるようになりました。
  • 外部リソースのデタッチされた署名を使用するプログラムでは、これを行うことができません。

提案

開発者は、 XmlDsigXsltTransformXmlDsigXsltTransformの使用状況、およびドキュメントレシーバーが処理できない可能性があるため、 Transform から派生した型を確認したい場合があります。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

Windows Communication Foundation (WCF)

WCF TransportDefaults から Ssl3 を削除する

詳細

トランスポート セキュリティと資格情報の種類の証明書で NetTcp を使用する場合、SSL 3 プロトコルは、セキュリティで保護された接続のネゴシエートに使用される既定のプロトコルではなくなりました。 TLS 1.0 は常に NetTcp のプロトコル リストに含まれているので、ほとんどの場合、既存のアプリに影響はありません。 既存のすべてのクライアントは、少なくとも TLS1.0 を使用して接続をネゴシエートできる必要があります。

提案

Ssl3 が必要な場合は、次のいずれかの構成メカニズムを使用して、ネゴシエートされたプロトコルの一覧に Ssl3 を追加します。

名前 価値
範囲 エッジ
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

Windows プレゼンテーション ファンデーション (WPF)

TextBlock コントロールの親の IsEnabled プロパティを変更すると、すべての子コントロールに影響します。

詳細

.NET Framework 4.6.2 以降では、System.Windows.Controls.TextBlock コントロールの親のSystem.Windows.UIElement.IsEnabled プロパティを変更すると、System.Windows.Controls.TextBlock コントロールの子コントロール (ハイパーリンクやボタンなど) に影響します。.NET Framework 4.6.1 以前のバージョンでは、System.Windows.Controls.TextBlock内のコントロールは、System.Windows.Controls.TextBlock親のSystem.Windows.UIElement.IsEnabled プロパティの状態を常に反映するとは限りません。

提案

なし。 この変更は、 System.Windows.Controls.TextBlock コントロール内のコントロールに対して想定される動作に準拠しています。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

CoerceIsSelectionBoxHighlighted

詳細

System.Windows.Controls.ComboBoxとそのデータ ソースに関連するアクションのシーケンスによっては、System.NullReferenceExceptionが発生する可能性があります。

提案

可能であれば、.NET Framework 4.6.2 にアップグレードします。

名前 価値
範囲 軽微
バージョン 4.6
タイプ ランタイム

影響を受ける API

DataGridCellsPanel.BringIndexIntoView が ArgumentOutOfRangeException をスローする

詳細

ScrollIntoView(Object) は、列の仮想化が有効になっているが、列の幅がまだ決定されていない場合に非同期的に動作します。 非同期処理が行われる前に列が削除されると、 System.ArgumentOutOfRangeException が発生する可能性があります。

提案

次のいずれか 1 つ。

  • .NET Framework 4.7 にアップグレードします。
  • .NET Framework 4.6.2 の最新のサービス パッチをインストールします。
  • ScrollIntoView(Object)への非同期応答が完了するまで、列の削除は避けてください。
名前 価値
範囲 エッジ
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

水平スクロールと仮想化

詳細

この変更は、メインスクロール方向に直交する方向に独自の仮想化を行う System.Windows.Controls.ItemsControl に適用されます (主な例は EnableColumnVirtualization="True" で System.Windows.Controls.DataGrid されています)。 特定の水平スクロール操作の結果が変更され、より直感的で、同等の垂直操作の結果に似た結果が生成されます。

操作には、水平スクロール バーを右クリックして取得したメニューの名前を使用する "ここにスクロール" と "右端" が含まれます。 どちらの場合も、候補オフセットと呼び出し SetHorizontalOffset(Double)が計算されます。

新しいオフセットまでスクロールした後、新しく仮想化解除されたコンテンツが System.Windows.Controls.Primitives.IScrollInfo.ExtentWidthの値を変更したため、"here" または "right edge" の概念が変更された可能性があります。

.NET Framework 4.6.2 より前では、スクロール操作では、"ここ" または "右端" ではない場合でも、単に候補オフセットが使用されます。 これにより、例で最もよく示すように、スクロールの親指が "バウンス" するような効果が得られます。 ある System.Windows.Controls.DataGrid に ExtentWidth=1000、Width=200 があるとします。 "右端" へのスクロールでは、候補オフセット 1000 ~ 200 = 800 が使用されます。 そのオフセットまでスクロールすると、新しい列は仮想化解除されます。 System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth が 2000 に変わるように、非常に広い範囲にあるとします。 スクロールは HorizontalOffset=800 で終了し、サムはスクロール バーの中央付近 (正確には 800/2000 = 40%) に "バウンス" します。

変更は、この状況が発生したときに新しい候補オフセットを再計算して、もう一度やり直す方法です。 (これは、垂直スクロールが既に機能する方法です)。

この変更により、エンド ユーザーにとってより予測可能で直感的なエクスペリエンスが得られますが、エンド ユーザーによって呼び出された場合でも、SetHorizontalOffset(Double)の明示的な呼び出しによって呼び出された場合でも、水平スクロール後のSystem.Windows.Controls.Primitives.IScrollInfo.HorizontalOffsetの正確な値に依存するすべてのアプリにも影響を与える可能性があります。

提案

仮想化解除によってSystem.Windows.Controls.Primitives.IScrollInfo.ExtentWidth変更される可能性がある水平スクロールの後に、System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffsetの予測値を使用するアプリを変更して、実際の値 (およびSystem.Windows.Controls.Primitives.IScrollInfo.ExtentWidthの値) をフェッチする必要があります。

名前 価値
範囲 軽微
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

Items.Clear で SelectedItems から重複部分が削除されない

詳細

セレクター (複数選択が有効になっている) の System.Windows.Controls.Primitives.MultiSelector.SelectedItems コレクションに重複部分があるとします。その場合、同じ項目が複数回表示されます。 データ ソースからこれらの項目を削除すると (たとえば、Items.Clear を呼び出すことにより)、System.Windows.Controls.Primitives.MultiSelector.SelectedItems からそれらの項目を削除できなくなります。最初のインスタンスのみが削除されます。 さらに、System.Windows.Controls.Primitives.MultiSelector.SelectedItems (SelectedItems.Clear() など) を引き続き使用すると、System.ArgumentException などの問題が発生する可能性があります。これは、System.Windows.Controls.Primitives.MultiSelector.SelectedItems に、データ ソース内にはもう存在しない項目が含まれているためです。

提案

可能であれば、.NET Framework 4.6.2 にアップグレードします。

名前 価値
範囲 軽微
バージョン 4.5
タイプ ランタイム

影響を受ける API

ピクセルの高さが異なる項目を含むフラット リストの項目スクロール

詳細

System.Windows.Controls.ItemsControlが仮想化 (IsVirtualizing=true) と項目スクロール (ScrollUnit=Item) を使用してコレクションを表示し、コントロールがスクロールして隣接する項目と高さが異なる項目を表示すると、System.Windows.Controls.VirtualizingStackPanelはコレクション内のすべての項目を反復処理します。 このイテレーション中に UI が応答しない。 イテレーションは、以前の .NET Framework リリースでも、他の状況で発生します。 たとえば、ピクセルの高さが異なる項目が検出されたときにピクセルスクロール (ScrollUnit=Pixel) が発生し、隣接するアイテムとは異なる数の子孫項目を検出したときに、項目のスクロール階層データ ( System.Windows.Controls.TreeView やグループ化が有効な System.Windows.Controls.ItemsControl など) が発生します。項目のスクロールとピクセルの高さが異なる場合、.NET Framework 4.6.1 で反復が導入され、階層データのレイアウトのバグが修正されました。 データがフラット (階層なし) の場合は不要であり、その場合は .NET Framework 4.6.2 で行われません。

提案

イテレーションが .NET Framework 4.6.1 で発生したが、以前のリリースでは発生しない場合 、つまり、 System.Windows.Controls.ItemsControl が項目である場合、ピクセルの高さが異なる項目を含むフラット リストをスクロールする場合は、次の 2 つの解決策があります。

  • .NET Framework 4.6.2 をインストールします。
  • .NET Framework 4.6.1 用の修正プログラム HR 1605 をインストールします。
名前 価値
範囲 軽微
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

ローカライズされたビルドで RibbonGroup の背景が透明に設定されている

詳細

System.Windows.Controls.Ribbon.RibbonGroup ローカライズされたビルドの背景は常に Transparent ブラシで描画され、UI エクスペリエンスが低下しました。 これは、.NET Framework 4.7 WPF の修正プログラムで修正されます。 System.Windows.Controls.Ribbon.RibbonGroupのローカライズされたリソースを更新することで、正しいブラシが確実に選択されます。

提案

.NET Framework 4.7 へのアップグレード

名前 価値
範囲 エッジ
バージョン 4.6.2
タイプ ランタイム

影響を受ける API

API 分析では検出できません。

WPF のスペル チェックが予期しない方法で失敗する

詳細

これには、WPF スペル チェックの問題が多数含まれます。

  • WPF スペル チェックでスローされる場合がある System.Runtime.InteropServices.COMException
  • "別のユーザーとして実行" を使用してアプリケーションを起動すると、WPF スペル チェックが UnauthorizedAccessException で失敗する
  • WPF スペル チェックでは、ドイツ語の 'Hausnummer' のような複合語のスペル ミスが誤って識別されます。

提案

問題 1 - これは .NET Framework 4.6.2 の問題 #2 で修正されました。 '別のユーザーとして実行' を使用してアプリケーションを起動すると、WPF スペル チェックはサポートされなくなりました。 .NET Framework 4.6.2 以降では、この方法で起動されたアプリケーションが予期せずクラッシュしなくなります。代わりに、スペル チェックは自動的に無効になります。 問題 3 - これは .NET Framework 4.6.2 で修正されました。

名前 価値
範囲 エッジ
バージョン 4.6.1
タイプ ランタイム

影響を受ける API

API 分析では検出できません。