.NET Framework 4.6.1 のリリースを発表!


 

本記事は、マイクロソフト本社の .NET Blog の記事を抄訳したものです。
【元記事】 .NET Framework 4.6.1 is now available! 2015/11/30 7:05 PM

このたびマイクロソフトは .NET Framework 4.6.1 の提供を開始しました。今回のリリースは下記のリンクから今すぐダウンロードしていただけます。

この記事では、.NET Framework 4.6.1 の重要な機能強化の概要をご紹介します。

  • WPF の機能強化: スペル チェックの強化、ユーザーごとのカスタム辞書のサポート、タッチのパフォーマンス向上
  • 楕円曲線デジタル署名アルゴリズム (ECDSA) を使用した X509 証明書のサポートの強化
  • AlwaysOn と Always Encrypted に関する SQL 接続のサポートの追加と、Azure SQL Database への接続確立時の回復性の強化
  • Azure SQL Database における更新された System.Transactions API を使用した分散トランザクションのサポートの追加
  • その他、RyuJIT、GC、WPF、WCF のパフォーマンス、安定性、信頼性に関連する多くの修正

.NET Framework 4.6.1 は、Windows 10、Windows 8.1、Windows 8、Windows 7 のほか、それらに相当するサーバー プラットフォームにインストールできます。ニーズに応じて、Web インストーラーまたはオフライン インストーラーのいずれかを使用できます。

Visual Studio 2012 以降では、.NET Framework 4.6.1 Developer Pack をインストールすることで、.NET Framework 4.6.1 をターゲットに設定することができます。

今回のリリースの詳細については、「.NET Framework 4.6.1 リリースでの変更一覧 (英語)」、「.NET Framework 4.6.1 におけるアプリケーションの互換性 (英語)」、.NET Framework 4.6.1 リリースと .NET Framework 4.6 リリースを比較した「.NET Framework API の差分 (GitHub) (英語) 」でご確認いただけます。

 

Windows Presentation Foundation

WPF チームは今回のリリースで、数多くの重要な機能強化を実施しました。こうした機能強化の詳細やその他の内容については、WPF チームによるこちら (英語) のブログ記事でご確認いただけます。

パフォーマンスの向上

複数のタッチ イベントの結合がサポートされたことで、WPF タッチ機能のパフォーマンスが向上し、マウス ポインターの動きと同様に、現在の位置が UI スレッドの待ち時間の後に報告されるようになりました。さらに、RichTextBox ですばやく入力しても、従来のようにレンダリング スレッドで非常に多くの CPU サイクルが消費されることがなくなり、入力がスムーズに反映されます。

サンプル

MSDN には多数の WPF サンプルが用意されています。マイクロソフトでは、(利用状況を踏まえて) 200 を超える人気のサンプルをオープンソースの GitHub リポジトリ (英語) に移行しているところです。サンプルをより良いものにするためにご協力をお願いいたします。プルリクエストを送信していただくか、GitHub のイシュー (英語) としてご意見をお寄せください。

DirectX 拡張機能

DX 10/DX 11 コンテンツとの相互運用が容易になる、D3DImage の新しい実装を提供する NuGet パッケージ (英語) をリリースしました。DX 12 のサポートは今後のリリースで追加される予定です。このパッケージのコードはオープンソース化されており、こちら (英語) から入手できます。

スペルチェックの機能強化

OS のサポートを利用して追加の言語のスペルチェックを行えるように、Windows 8.1 以上で WPF のスペル チェック機能が更新されました。Windows 8 以下については機能の変更はありません。

ユーザーごとのカスタム辞書のサポートの追加

.NET Framework 4.6.1 の WPF では、グローバルに登録されるカスタム辞書のサポートが追加されました。この機能は、コントロールごとの登録機能と共に利用できます。さらに、Windows 10 と Windows 8.1 のカスタム辞書では、除外された単語とオートコレクト リストの機能も追加されました。

WPF API の変更の詳細については、MSDN の ScrollViewer (英語)TextDecorationCollection (機械翻訳)XamlObjectWriterSettings (機械翻訳) の各クラスを参照してください。

 

ECDSA を使用した X509 証明書のサポート

.NET Framework 4.6 では、System.Security.Cryptography API (機械翻訳) に対して重要な機能強化をいくつか行い、X509 証明書での RSACng のサポートを追加しました。.NET Framework 4.6.1 では暗号化ライブラリを拡張し、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用した X509 証明書のサポートを強化しました。ECDSA キーはセキュリティ レベルが同等の RSA キーよりもサイズが小さくなるため、トランスポート層セキュリティ (TLS) などの利用におけるパフォーマンスが向上します。.NET Framework の実装は基盤 OS の機能を呼び出します。

新しいアプローチの実装方法の例を以下に示します。

 

ECDsaCetificateExtensions の構文の詳細については、MSDN のドキュメント (英語) を参照してください。

 

SQL の機能強化

ハードウェア セキュリティ モジュールのサポート

.NET Framework 4.6 では、Always Encrypted (英語) 機能がサポートされるようになりました。この機能は SQL Server による暗号化データに対する操作を可能にする手段として使用され、暗号化キーはお客様の信頼できる環境内のアプリケーションと共に保管されます。.NET Framework 4.6.1 では、これをベースに Always Encrypted の列マスター キーをハードウェア セキュリティ モジュール (HSM) にネイティブに格納します。

このサポートにより、HSM に格納された非対称キーを利用できるため、独自の列マスター キー ストア プロバイダーを記述して、それをアプリケーションに登録する必要はなくなります。

メモ: HSM に格納されている列マスター キーで保護された Always Encrypted データにアクセスするには、HSM ベンダーが提供する CSP プロバイダーか CNG キー ストア プロバイダーを、アプリケーションサーバーかクライアント コンピューターにインストールしていただく必要があります。HSM のセットアップ方法や、HSM で保護された列マスター キーを利用して、保護されている列のデータにアクセスするアプリケーションを実装する方法の詳細については、こちら (英語) のブログ記事を参照してください。

 

AlwaysOn に関する MultisubnetFailover 接続動作の改良

SqlClient (機械翻訳) では、SQL Server 2012 で導入された AlwaysOn 可用性グループへの高速な接続を自動的に提供するようになりました。SqlClient は、アプリケーションが別のサブネットの AlwaysOn 可用性グループに接続しようとしているかどうかを透過的に検出し、その時点でアクティブなサーバーをすばやく特定して、そのサーバーに対する接続を確立します。

以前のリリースでは、アプリケーションで “MultisubnetFailover=true” を含む接続文字列を設定し、AlwaysOn 可用性グループに接続しようとしていることを示す必要があります。この接続キーワードを使用しない場合、アプリケーションでは AlwaysOn 可用性グループに接続する際にタイムアウトが発生する可能性があります。

今回追加された機能により、アプリケーションで MultisubnetFailover を true に設定する必要はなくなりました。SqlClient における AlwaysOn 可用性グループのサポートの詳細については、「高可用性障害復旧のための SqlClient サポート」を参照してください。

 

Azure SQL Database への接続確立時の回復性の強化

ADO.NET 4.6.1 では、SqlConnection.Open (機械翻訳) を使用した Azure SQL Database への接続確立時の信頼性が向上しています。SqlClient の Connection Open ロジックでは、接続タイムアウト時間内に発生した特定のエラーについて、一時的な障害に対するベスト エフォート型の再試行メカニズムが新たに組み込まれました。再試行の間隔と合計回数は変更可能です。ConnectionString (機械翻訳) キーワードの ConnectRetryInterval と ConnectRetryCount は、アイドル接続の回復性シナリオ (英語) で使用する以外に、これらの値を設定するためにも使用できます。この機能により、アプリケーションに他の再試行ロジックを追加しなくても、Azure SQL Database への接続時のアプリケーションの可用性が向上します。ただし、一時的な障害に対する回復性をさらに高めるには、追加でアプリケーション レベルの再試行ロジックを組み込むことをお勧めします。

 

MSDTC 以外のコーディネーターを使用した分散トランザクション

Transaction.EnlistPromotableSinglePhase (機械翻訳) メソッドを使用している場合、MSDTC 以外の別の分散トランザクションマネージャーを利用してトランザクションをプロモートできるようになりました。そのためには、Transaction.EnlistPromotableSinglePhase メソッドの新しいオーバーロードに GUID としてトランザクション プロモーターの ID を指定します。この操作に成功した場合、Transaction の機能に制限が課されます。

MSDTC 以外のトランザクション プロモーターが登録されると、以下のメソッドでは System.Transactions によって MSDTC へのプロモーションが求められるため、TransactionPromotionException がスローされるようになります。

Transaction.EnlistDurable

TransactionInterop.GetDtcTransaction

TransactionInterop.GetExportCookie

TransactionInterop.GetTransmitterPropagationToken

Transaction オブジェクトのシリアル化を行うメソッド

MSDTC 以外のトランザクション プロモーターが登録された後、その後の永続的な登録は、そのトランザクション プロモーターによって、プロモーターが定義するプロトコルを使用して行われる必要があります。トランザクションプロモーターの GUID を取得するには、Transaction.PromoterId プロパティを使用します。トランザクションがプロモートされると、トランザクションプロモーターはプロモーション トークンと呼ばれる byte[] を提供します。MSDTC 以外によってプロモートされたトランザクションのプロモーション トークンをアプリケーションで取得するには、Transaction.GetPromotedToken メソッドを使用します。

Transaction.EnlistPromotableSinglePhase メソッドの新しいオーバーロードを使用する場合、プロモーション処理が問題なく完了するように、特定の呼び出しシーケンスに従う必要があります。この規則は、MSDN の新しいメソッドの説明に記載されています。

サンプル コードはこちら (英語) でご覧いただけます。

 

Azure SQL Database を使用した分散トランザクション

分散トランザクションでは、複数のデータベースに対して変更が行われた場合に、すべてのデータベースが変更されるか、どのデータベースも変更されないかのいずれかになります。これにより、原子性と独立性が実現され、すべてのデータベースの状態の一貫性が確保されます。このことは、たとえば複数のデータベース間の財務トランザクションを処理する場合や、あるデータベースで在庫を更新し、別のデータベースで注文を更新するといった場合に重要となります。

前述したように、Azure SQL Database では、MSDTC 以外のコーディネーターを使用する System.Transaction API が新たにサポートされました。Azure の PaaS (Platform as a Service) サービスでは MSDTC を利用できないため、Azure SQL Database では MSDTC に依存しない独自の分散トランザクション マネージャーが使用されます。.NET Framework 4.6.1 の機能強化により、MSDTC を使用しないトランザクション コーディネーションが可能になったため、Azure SQL Databases では使い慣れた System.Transaction API を使用した分散トランザクションがサポートされるようになりました。その結果、MSDTC を使用した既存のデータベース アプリケーションの Azure への移行が非常に簡単になります。

ほとんどの場合、.NET Framework 4.6.1 を使用すれば、System.Transaction API を使用した既存のコードを変更せずにそのまま Azure SQL Database で使用することができます。以下のサンプル コードは、Azure SQL Database でもサポートされるようになった System.TransactionScope を使用した分散トランザクション コーディネーションの一般的な流れを示しています。

Azure SQL Database の分散トランザクションのサポートの詳細については、Elastic Database トランザクションに関するドキュメントを参照してください。

 

プロファイリングと NGen

IcorProfilerInfo インターフェイスにおける PDB へのアクセスのサポートの強化

ASP.NET 5 では、アセンブリが Roslyn によってメモリ内でコンパイルされることが一般的です。プロファイリングツールを作成する開発者の皆様にとっては、これまでディスク上でシリアル化されていた PDB が存在しなくなる可能性があるということです。プロファイリング ツールでは多くの場合、PDB を使用して、コード カバレッジや 1 行ごとのパフォーマンス分析といったタスクのために、コードとソース行を関連付けていました。

こうしたプロファイリング ツールからメモリ内の PDB データにアクセスできるようにするために、一連の ICorProfiler API に新しい機能を追加しました。新しい API を使用すると、プロファイラーでメモリ内の PDB の内容をバイト配列として取得してから、それを処理したりディスク上にシリアル化したりすることができます。

この API の変更については、MSDN の ICorProfilerInfo7 (機械翻訳) および ICorProfilerCallback7 に関するドキュメントをお読みください。

 

ICorProfiler によるインストルメンテーションの改良

ICorProfiler API の ReJIT 機能によって動的なインストルメンテーションを行っているプロファイラー向けに、機能強化が行われています。従来、このようなツールは IL をいつでもインストルメント化できましたが、メタデータを変更できるのはモジュールの読み込み時だけでした。IL はメタデータを参照しているため、可能なインストルメンテーションの種類は限られていました。

そこで、モジュールを読み込んだ後の一部のメタデータ編集、特に新しい AssemblyRef、TypeRef、TypeSpec、MemberRef、MemberSpec、UserString の各レコードの追加をサポートすることで、こうした制限の一部を解消しました。これらの変更により、はるかに広範なインストルメンテーションをすばやく行うことが可能になり、運用環境の診断を的確に実施できます。その結果、実行中のプロセスのコードを再コンパイルせずに変更できるようになります。これは、運用環境を診断するうえでは必須条件となります。

API の変更の詳細については、以下の MSDN へのリンクからご確認いただけます。

https://msdn.microsoft.com/ja-jp/library/mt592054(v=vs.110).aspx (機械翻訳)

ネイティブ イメージ ジェネレーター (NGen) PDB

マシン間のイベント トレースでは、マシン A 上でプログラムのプロファイリングを行い、ソース行と対応付けられたプロファイリングデータをマシン B 上で調査できます。新しい NGen PDB 機能を使用すると、マシン間のイベント トレースをはるかに簡単に行うことができます。

ユーザー マシンまたはホスト マシン上で生成された NI イメージのプロファイルリング中にソース行の情報を取得する必要がある場合、最初に関連するすべてのアセンブリをユーザーマシンまたはホスト マシンから IL PDB にアクセス可能なマシンにコピーしなければならないといった問題が生じる可能性があります。しかし、NGen PDB 機能を使用すれば、IL PDB に依存せずに IL とネイティブ コードのマッピングを含む PDB を NGen で作成できます。マシン間のイベント トレースのシナリオでは、マシン A によって生成されたネイティブ イメージの PDB をマシン B にコピーし、DIA API を使用して、IL PDB のソースと IL のマッピングと、ネイティブ イメージ PDB の IL とネイティブ コードのマッピングを読み取れば、あとは両方のマッピングを組み合わせることで、ソースとネイティブコードのマッピングが実現します。ネイティブ イメージの PDB のサイズはどのモジュールやネイティブ イメージよりもかなり小さいため、マシン A からマシン B へのコピー時間ははるかに短くなります。

以前のバージョンの .NET Framework を使用する場合、ソースとネイティブ コードのマッピングを作成するには、プロファイリング対象のマシンから IL PDB が格納された分析用マシンへと、モジュールやネイティブ イメージをすべてコピーする必要があります。この方法は、ファイル サイズが比較的小さいスマートフォン用アプリケーションでは問題ないと考えられますが、デスクトップシステムではファイル サイズが非常に大きくなる場合があり、コピーにかなりの時間がかかります。

 

ネットワークの強化

.NET Framework 4.6 では、トークン バインディング (英語) プロトコルがサポートされ、ASP.NET で使用することができます。トークン バインディング (英語)IETF (Internet Engineering Task Force、英語) の標準トラックに追加された新しいプロトコルで、ブラウザーのクッキーをベアラートークンとして利用できる問題 (マシンから盗まれたクッキーを悪意のあるコードが使用することで、別の場所でそのユーザーになりすます行為) を解決することを目的としています。

この目的を達成するために、トークン バインディングでは、クライアント マシンしかアクセスできないプライベート キーを使用してトークンをクライアントマシンにバインドします。.NET Framework 4.6.1 では、HttpListener API のサポートを追加し、サーバー アプリケーションでトークンバインディングを使用することができます。

この機能を実装するサンプル コードを以下に示します。

 

まとめ

本日リリースされた .NET Framework 4.6.1 および Visual Studio 2015 Update 1 によって開発作業が大幅に改善されると共に、アプリの信頼性とパフォーマンスが向上します。今回のリリースを完成させるにあたり、フィードバックを提供してくださった皆様に心より感謝申し上げます。ぜひ最新版のリリースをインストールしてご意見をお聞かせください。皆様のご協力をお待ちしております。

Visual Studio の [Send-a-Smile] 機能から皆様の声をお聞かせください。また、バグのご報告は Microsoft Connect までお願いいたします。そのほか、今後のリリースで導入してほしい新機能についてご提案がありましたら、Visual Studio User Voice (英語) の .NET カテゴリに投稿してください。

Comments (0)