Windows 10 Anniversary Update 以前の OS 上で、Visual Studio 2017 を使用して .NET Framework 4.7 アプリケーションを開発する方法について

こんにちは、 Visual Studio サポート チームです。 今回は、Windows 10 Anniversary Update 以前の OS 上で、Visual Studio 2017 を使用して .NET Framework 4.7 アプリケーションを開発する方法をご紹介します。   背景 Windows 10 Creators Update (バージョン 1703) 上で Visual Studio 2017 を使用すると、特定のパッケージなどをインストールしなくても、.NET Framework 4.7 アプリケーションを開発することが可能です。これは、Windows 10 Creators Update  には .NET Framework 4.7 が同梱されているためです。 一方、Windows 10 Anniversary Update (バージョン 1607) 以前の OS には .NET Framework 4.7…


.NET Framework のコンソール アプリケーションで STA スレッドから XmlSerializer クラスを利用する場合の注意事項

こんにちは、Visual Studio サポート チームです。 今回は、.NET Framework のコンソール アプリケーションで STA 属性を指定したスレッドから、XmlSerializer クラスを利用するなどして直接、または間接的に COM コンポーネントが利用される場合の注意事項についてご案内します。   注意事項 STA に属する COM コンポーネントを作成した場合は、COM のガイドラインに則り、対象の STA スレッドでは定期的にメッセージ ポンプを動作させてウィンドウ メッセージを処理する必要があります。メッセージ ポンプの処理を実装していないと、対象 STA の外部からは COM コンポーネントにアクセスすることができません。このため、特に .NET Framework のコンソール アプリケーションでは、ファイナライザー スレッドが対象の STA スレッドと通信できずにハング アップしてしまい、メモリ リークなどの問題を引き起こす可能性があります。 STA スレッドがメッセージ ポンプを実装する必要がある点については以下のドキュメントに解説がありますのでご参照ください。 [OLE] OLE スレッド モデルの概要としくみ https://support.microsoft.com/ja-jp/help/150777/info-descriptions-and-workings-of-ole-threading-models   具体例 .NET Framework の XmlSerializer クラスでは、コンストラクタの特定のオーバーロード (*1) を利用すると、内部でアセンブリを生成してキャッシュする処理が行われます。この処理では内部的に…


Windows 10 上で .NET Framework 4.6.2 のインストールに失敗する

こんにちは。Visual Studio サポート チームです。 今回は、Windows 10 に .NET Framework 4.6.2 をインストールする際に発生する可能性のあるエラーと対処方法についてご案内します。 ※ Windows 10 Anniversary Update を適用されている環境には既定で .NET Framework 4.6.2 がインストールされていますので、個別にインストールする必要はありません。以下の内容は、Anniversary Update を適用することができない Windows 10 環境に .NET Framework 4.6.2 をインストールするケースを対象としています。   現象 Windows 10 上で .NET Framework 4.6.2 のインストールを行った場合に、以下のエラー メッセージが表示されインストールに失敗することがあります。 ログファイルには以下のように記録されます。 —————————————— Exe (C:\99e6d478c9a1da0ac4fd\Windows10.0-KB3151900-x86.cab) failed with 0x543 – 匿名レベル セキュリティ トークンを開けません。 Exe Log File: CBS.log…


オフライン環境で .NET Framework 4.6.2 をインストールする場合の注意点

こんにちは。Visual Studio サポート チームです。 今回は、弊社サポートにお問い合わせいただくことも多い .NET Framework 4.6.2 のインストール時の問題と対処方法についてご案内します。 .NET Framework 4.6.2 のインストールを検討されている皆様のお役に立てましたら幸いです。   現象 オフラインまたは、最新の Windows Update を適用できない環境で  .NET Framework 4.6.2 のインストールを行った場合に、以下のようなエラーが発生しインストールに失敗することがあります。 ————————– 次の理由により、.NET Framework 4.6.2 はインストールされませんでした : 証明書チェーンを、信頼されたルート機関として構築できませんでした。 ————————– また、このときログ ファイルには以下のような内容が記録されます。 ————————– Installation failed with error code: (0x800B010A), “証明書チェーンを、信頼されたルート機関として構築できませんでした。 ” (Elapsed time: 0 00:01:35). ————————–   原因 .NET Framework のインストーラー パッケージにはデジタル署名が施されており、インストール時にはデジタル署名に使用されている証明書の有効性が検証されます。証明書の有効性を検証する際には、証明書の発行元や、証明書が失効されていないかどうかなど、最新の情報をインターネット経由で取得して使用します。 このため、インターネットに接続していない環境や Windows…


.NET Framework 用の月例のロールアップの導入について

こんにちは。Visual Studio サポート チームです。 2016 年 10 月から、「.NET Framework 用の月例のロールアップ (.NET Framework Monthly Rollup)」と呼ばれる新しい更新プログラムのリリースをご利用いただけるようになります。詳細については、以下の .NET Framework 開発チームからのアナウンスをご覧ください。   Introducing the .NET Framework Monthly Rollup https://blogs.msdn.microsoft.com/dotnet/2016/08/15/introducing-the-net-framework-monthly-rollup/ (日本語訳) .NET Framework 用の月例のロールアップの導入について https://blogs.technet.microsoft.com/jpsecurity/2016/08/30/introducing-the-net-framework-monthly-rollup/   ※ 2016/10/13 追記 : 以下のドキュメントも公開されました。あわせてご参照ください。 .NET Framework Monthly Rollups Explained https://blogs.msdn.microsoft.com/dotnet/2016/10/11/net-framework-monthly-rollups-explained/ (日本語訳) .NET Framework 用の月例のロールアップの詳細 https://blogs.technet.microsoft.com/jpsecurity/2016/10/13/net-framework-monthly-rollups-explained/  


参照側プログラムのリビルドが必要となるような DLL の変更について

こんにちは、Visual Studio サポート チームです。 ほとんどの .NET Framework アプリケーション開発プロジェクトでは、プログラムを再利用できるよう、ある程度の機能をひとまとまりにしたクラス ライブラリ (DLL) を開発、参照されているかと思います。今回は、そのような DLL に変更を加えた際に、DLL を参照するプログラム側でも再ビルドが必要になるケースについてご案内します。 DLL に実装されたメソッドの名前や引数などに変更が生じた場合、その DLL を参照するプログラム側でも変更内容に合わせてメソッドの呼び出し方を修正し、リビルドする必要があることはイメージしやすいかと思います。このような変更以外で、一見するとリビルドは必要ないように思われる場合でも、DLL を参照するプログラム側でリビルドが必要な場合があります。 DLL を参照する側のプログラムのリビルドの必要性については、プロジェクトの工数にも影響する重要なトピックですので、本稿が少しでもお役に立てましたら幸いです。 ※ 以下にご案内する内容の一部は、製品の仕様として公開させていただいているものではなく、あくまで、現時点の検証に基づくものであり、予告なく変更される可能性もあります。また、リビルドが必要なすべてのケースを網羅していることを保証するものではありません。何卒、ご了承ください。   DLL の変更時に参照元のプログラムも再ビルドが必要になるケース DLL 側で以下の 2 パターンの変更が行われた場合、変更された DLL を参照しなおして参照側プログラムもリビルドする必要があります。特に (1) の定数、デフォルト引数、および名前付き引数の追加/変更については、参照側のリビルドは不要と考えられがちですのでご注意ください。   (1) DLL と参照側プログラムの接点部分に変更が生じた場合 DLL に定義された以下の情報は、参照側プログラムのビルド時に参照側にも取り込まれます。このため、DLL 側でこれらに変更が生じた場合、参照側プログラムでも、新しい DLL を参照しなおしてリビルドする必要があります。   ・定数の値 ・列挙型 (型の名前、要素の名前、要素の順番、要素の挿入・削除、など) ・クラス、構造体、インターフェイス (型の名前、要素 (フィールド・プロパティ・メソッド) の名前、要素の削除、メソッドの戻り値の型・デフォルト引数・名前付き引数、アクセス修飾子、など) ・属性 (InternalsVisibleTo、Obsolete、Conditional、etc.) の有無  …


.NET Framework Language Pack について

こんにちは、Visual Studio サポートチームです。 今回は、.NET Framework の言語パック (Language Pack) について、お問い合わせいただくことの多いインストールとアンインストールについてご説明します。   言語パックとは .NET Framework Language Pack は、.NET Framework が内部で使用するリソースのうち、言語に依存するもの (エラー メッセージや一部の画像データなど) を言語ごとにまとめたパッケージで、実行コードを含まないリソース ファイルの集まりです。 例えば、日本語の言語パックをインストールすることで、.NET Framework のクラス ライブラリを使用した際のエラー内容などを日本語で表示することができます。 なお、言語パックはあくまで .NET Framework の内部リソースをローカライズするだけのものですので、インストールしていない状態でも、.NET Framework 本体のクラス ライブラリは問題なくご利用いただくことができます。 また、あくまで .NET Framework ライブラリ内部のリソースに関するものであり、お客様が開発したアプリケーションで使用するリソースの言語とは関係ありません。   インストールについて .NET Framework 本体のインストールに Web インストーラーを利用した場合、言語パックも自動的にインストールされます。 一方、.NET Framework 本体のインストールにオフライン インストーラーを利用した場合は、言語パックは自動的にインストールされません。このため、言語パックをインストールしたい場合は、個別に言語パックのインストーラーを入手してインストールする必要があります。 なお、新しいバージョンの言語パックをインストールした場合、コントロール パネルの “プログラムと機能” の一覧に古いバージョンの言語パックも表示されたまま残る動作となっていますが、古いバージョンのリソース ファイルは存在せず、新しいバージョンのみ存在している状態となります。   アンインストールについて…


.NET Framework 4.6 の新しい 64 bit JIT コンパイラーについて

こんにちは、Visual Studio サポート チームです。今回は .NET Framework 4.6 から導入された 64 bit アプリケーション用の新しい JIT コンパイラー (コード ネーム RyuJIT) についてご紹介します。   概要 従来の 64 bit 向け JIT コンパイラーでは、32 bit 向けの JIT コンパイラーと比較してパフォーマンス面で劣る問題がありました。 例えば、コントロール数の非常に多い画面を表示する際、64 bit アプリケーションでは画面の表示までにとても時間がかかるケースがありました。 .NET Framework 4.6 から導入された新しい JIT コンパイラー (RyuJIT) ではこの点を大きく改善し、64 bit アプリケーションの JIT コンパイルにかかる時間を大幅に短縮しています。 RyuJIT の詳細については、開発チームのブログ記事もご参照ください。 (いずれも Preview バージョンの段階で執筆されたものであり、Preview 版固有の記述も含まれておりますことご了承ください。)   RyuJIT: The next-generation JIT…


.NET Framework 4 を対象に作成したアプリケーションのサポートについて

こんにちは、Visual Studio サポート チームです。 今回は .NET Framework 4.x 系のサポート ポリシーの変更についてご案内します。 2014 年 8 月 7 日 に公開された以下のドキュメントで案内されているとおり、2016 年 1 月 12 日をもって、.NET Framework 4、4.5、および 4.5.1 のサポートが終了します。 (※1)     Microsoft .NET Framework サポート ライフサイクル ポリシー https://support.microsoft.com/ja-jp/gp/framework_faq これ以降は、セキュリティ更新プログラムも含めて修正プログラムは提供されず、テクニカル サポートをご利用いただくこともできませんのでご注意ください。 .NET Framework 4.6 などの最新の .NET Framework への移行をお早目にご検討くださいますようお願いいたします。 (※1) .NET Framework Language Pack のサポート期間は .NET Framework 本体のサポート期間に準拠します。 なお、.NET Framework…


.NET Framework 4 で C++/CLI 混在モード アセンブリを使用すると、スレッドの生成・終了時にメモリ リークが生じる問題について

こんにちは、Visual Studio サポート チームです。 今回は、.NET Framework 4 上で、C++/CLI の混在モード アセンブリを使用した場合に発生するメモリ リークの問題についてお知らせします。 現象 Visual C++ 2010 などを使用して開発された、.NET Framework 4 上で動作する C++/CLI の混在モード アセンブリを使用するアプリケーションで、スレッドの生成と終了を繰り返すとスレッドの生成時に確保されたメモリ領域が解放されずにリークする。 原因 本現象は .NET Framework 4 のランタイム ライブラリの不具合に起因して発生します。 スレッドの生成・終了時には、プロセスにロードされている各 DLL のエントリポイントとなる関数 (DllMain) がコールされますが、.NET Framework のランタイム ライブラリの 1 つ (mscoreei.dll) において、C++/CLI 混在モード アセンブリをロードしている場合に固有のメモリ領域をスレッド生成時に確保する動作があり、スレッドの終了時にこの領域を適切に解放していないために、メモリリークが発生します。 弊社製品の不具合によりお客様にご迷惑をおかけしておりますこと、深くお詫び申し上げます。 解決方法 本問題は .NET Framework 4.5 以降では修正されています。 このため、アプリケーションの実行環境に .NET Framework 4.5 以降のランタイムライブラリをインストールすることで、本問題を解消することが可能です。…