プロジェクト参照を含むソリューションのビルド時に、変更のないプロジェクトに対してもリビルドが行われる

こんにちは、Visual Studio サポート チームです。 今回は、Visual Studio でソリューションをビルドする際のリビルドの動作に関して、ご留意いただきたい内容をご紹介します。   現象 プロジェクト参照 (*1) を含むソリューションを Visual Studio で開き、ソリューション構成 (Debug/Release など) を切り替えてビルドを行うと、プロジェクトに変更が加えられていなくてもプロジェクトがリビルドされる場合があります。   (*1) “プロジェクト参照” とは、あるプロジェクトから、同一のソリューションに含まれる別のプロジェクトを参照する参照方法であり、被参照側プロジェクトに変更があると、そのプロジェクトだけでなく参照側のプロジェクトもビルドが必要とみなされます。複数のプロジェクトを 1 つのソリューションで同時に開発する場合に便利な参照形式です。 これに対し、DLL を直接参照する “アセンブリ参照” は、サードパーティから提供されている DLL や、社内共通の共通ライブラリとして提供されている DLL など、対象のプロジェクトと被参照 DLL が別々に開発される場合に利用される参照方法です。   原因 本現象は Visual Studio の想定された動作に基づく制限事項です。 プロジェクト参照を含むソリューションでは、Visual Studio がビルドの要否を判断するロジックの制約から、直前にビルドされたソリューション構成から変更が生じた場合に、プロジェクトを参照している側のプロジェクトに対してリビルドが行われます。(*2) なお、”直前にビルドされたソリューション構成” の情報は、Visual Studio の起動中は Visual Studio 内に記憶され、Visual Studio の終了後は .suo ファイル (*3)…


Visual C++ 2015 以降のバージョンの再頒布可能パッケージにおけるインストールの前提条件

こんにちは、Visual Studio サポート チームです。 今回は、最近多くのお客様からお問い合わせをいただいている Visual C++ 再頒布可能パッケージのインストールに必要な前提条件についてご案内します。   以前のブログ記事でもご案内していますが、Visual C++ 2015 以降のバージョンの C ランタイム (CRT) は、汎用 C ランタイム (UCRT : Universal C Runtime) とそれ以外のランタイムで構成されています。Visual C++ 2015 再頒布可能パッケージをインストールすると、これらのランタイムがすべてインストールされます。 ここで、UCRT は Windows 10 以降の OS は既定でインストールされているものになりますが、Windows 10 より前の OS にインストールするためには、対象の環境に前提となる KB が適用されている必要があります。 このため、例えば、新規にセットアップしたばかりの Windows 8.1 に Visual C++ 2015 再頒布可能パッケージをインストールしようとすると、UCRT の前提条件となる KB が適用されていないために、インストール エラーとなることが想定されます。 Visual C++…


ClickOnce アプリケーションのインストールや更新の後に発生する場合があるアプリケーション起動時のエラーについて

こんにちは、Visual Studio サポート チームです。 今回は、ClickOnce アプリケーションのインストールや更新後に発生する場合がある、アプリケーション起動時のエラーとその対処方法についてご案内します。 当ブログの下記の記事でも ClickOnce アプリケーションの起動時のエラーについて取り扱っていますが、今回は、この他によくお問い合わせをいただく既知の問題についてご案内しています。 ClickOnce 起動時のエラーについて https://blogs.msdn.microsoft.com/jpvsblog/2011/08/05/clickonce/   現象 ClickOnce アプリケーションをインストールした場合や更新した場合に、以下のようなエラー ダイアログが表示され、アプリケーションの起動に失敗する場合があります。 “詳細” ボタンを押下すると、エラーの状況に応じて以下のようなエラーの詳細が記録されている場合があります。 ※ 当記事の原因に該当する場合、多くのケースではスタック トレース上に ComponentStore.ActivateApplication が現れますが、スタック トレースの内容など詳細は .NET Framework のバージョンにより異なる可能性がございます。また、代表的なエラー メッセージを挙げており、すべてのパターンを網羅するものではございませんので予めご了承ください。 必要なレジストリ キーが見つからなかった場合 この操作中に次のエラーが検出されました。 * [2018/02/19 14:35:33] System.ArgumentException – 値が有効な範囲にありません。 – ソース:System.Deployment – スタック トレース: 場所 System.Deployment.Application.NativeMethods.CorLaunchApplication 場所 System.Deployment.Application.ComponentStore.ActivateApplication 場所 System.Deployment.Application.SubscriptionStore.ActivateApplication 場所 System.Deployment.Application.ApplicationActivator.Activate 場所 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation 場所 System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker…


OLE パッケージ オブジェクトを含むドキュメントを開くと GDI オブジェクトが増加する

こんにちは、Visual Studio サポート チームです。 今回は、OLE パッケージ オブジェクトをプログラムから利用した場合に発生する問題についてご案内します。   現象 アプリケーションから OLE パッケージ オブジェクト (*1) を含むドキュメントを開いて閉じる操作を繰り返すと、アプリケーションの GDI オブジェクトの使用量が増加します。 増加量は僅かであるため、ほとんどのアプリケーションではこの問題が影響することはありませんが、パッケージ オブジェクトを含むドキュメントを、開いて閉じる動作を繰り返すようなアプリケーションでは、GDI オブジェクトの総量がプロセスごとに割り当てられた上限 (既定で 10,000) に達し、それ以降の GDI オブジェクトの生成に失敗して描画処理に問題が生じる場合があります。   (*1) パッケージ オブジェクトは、他のファイルやプログラムなどを OLE オブジェクトとしてドキュメントに挿入できるようにするためのオブジェクトです。   パッケージ オブジェクトの挿入 原因 本現象は、OLE パッケージ オブジェクトを管理する Windows OS のパッケージ管理コンポーネント (packager.dll) の不具合に起因するものです。 本コンポーネントでは、パッケージ オブジェクトごとにタイトルを表示するためのフォント オブジェクトを生成しますが、ドキュメントを閉じてもこのフォント オブジェクトが解放されないため、ドキュメントを開いて閉じる操作を繰り返すとフォント オブジェクト (GDI オブジェクト) が増加し続ける結果となります。   対応状況 マイクロソフトでは米国本社の開発部門でも本不具合を確認していますが、現時点では修正プログラムなどは提供されておらず、提供の予定はありません。 パッケージ…


以前のバージョンの Visual Studio 2017 インストーラーについて

こんにちは、Visual Studio サポート チームです。 Visual Studio 2017 も先日バージョン 15.5 が公開されました! (※2017/12現在) 弊社としては、不具合の修正やセキュリティの強化が適用されている最新版のご利用を推奨しており、製品サポートも基本的には最新版にて承っています。   しかしながら、様々なご事情で以前のバージョンを入手したいというお問い合わせもいただいており、このようなご要望を受け、その時点でリリースされている「最新バージョンのひとつ前のバージョン」をご利用いただけるように以下のページで公開しています。 Installing an earlier release of Visual Studio 2017 https://www.visualstudio.com/en-us/productinfo/installing-an-earlier-release-of-vs2017 ※ 新しいバージョンがリリースされた場合には公開バージョンが変更されますのでご留意ください。   なお、各バージョンのインストール パッケージを保存される場合には注意が必要です! Visual Studio 2017 のインストーラーは、インターネット上から最新版のパッケージをダウンロードしてインストールする仕組みとなっています。このため、以前のバージョンのインストーラーを保存してあっても、インストール実行時には最新版のパッケージが取得されます。 これを防ぐためには、インストーラーのみを保存しておくのではなく、その時点のバージョンのオフライン パッケージを作成しておく必要があります。お手数とはなりますが、特定バージョンの Visual Studio 2017 インストーラーを保存されたい場合には、予め以下の手順でオフライン インストーラーを作成してくださいますようお願いいたします。   特定バージョンのオフラインインストーラーの作成手順 オフライン インストーラーの作成手順は以下のページでもご案内しています。 Visual Studio 2017 のネットワーク インストールを作成する https://docs.microsoft.com/ja-jp/visualstudio/install/create-a-network-installation-of-visual-studio#how-to-create-a-layout-for-a-previous-visual-studio-2017-release ※「以前の Visual Studio 2017 リリースのレイアウトを作成する方法」をご参考ください。 手順…


Visual Studio 単体テストで発生するエラーについて

こんにちは、Visual Studio サポート チームです。 今回はVisual Studioの単体テストで発生するエラーの対処方法についてご案内します。   現象 単体テストの実行で以下のエラーメッセージが出る場合には、1 つのソリューション ファイル (.sln) 内に、複数の単体テスト プロジェクトが存在し、単体テストの参照アセンブリのバージョンが異なっている場合があります。 -エラーメッセージ- [“発生時間” Error] 実行プログラム ‘executor://mstestadapter/v2’ の呼び出し中に例外が発生しました: 型 ‘Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.UnitTestRunner’ にコンストラクターが見つかりませんでした。 ——————     対処 複数の単体テスト プロジェクトで参照しているアセンブリのバージョンが異なっている場合には、参照するアセンブリのバージョンを統一して単体テストを実行します。 <本稿の参考> 本ブログでご案内したエラーは、海外のお客様から以下のサイトに報告されています。 日本語による情報が少ない状況であったため、今回のVisual Studioサポートチーム ブログでご案内しています。 Tests fail to run on build server with V1.1.17, but will run with V1.1.14 #166 https://github.com/Microsoft/testfx/issues/166 Error in Unit test targetting…


アプリケーション構成ファイルのエンコーディングを変更した場合に発生する問題について

こんにちは、Visual Studio サポート チームです。 今回は、アプリケーション構成ファイル (***.exe.config) のエンコーディング設定を変更した場合に発生する問題と対処方法についてご案内します。   現象 アプリケーション構成ファイル (***.exe.config) のエンコーディングを Shift-JIS などに変更してアプリケーションを実行すると、以下のようなエラーが発生してアプリケーションの起動に失敗します。   Visual Studio からは、次の手順で App.config のエンコーディングを変更することができますが、既定値から変更した場合は上記のようなエラーが発生する可能性があります。   手順: ソリューション エクスプローラーで App.configを選択します。 プロパティ ウィンドウの [エンコード] で “日本語 (シフト JIS)” に設定して保存します。 ※ なお、Visual Studio ホスティング プロセスを介してアプリケーションが起動されている場合は、上記のエラーは発生しません。    対処 App.config のエンコーディングに Uft-8、または Utf-16 を使用することでエラーの発生を回避することができます。 “Unicode” – <?xml version=”1.0″ encoding=”utf-16″ ?> “Unicode (UTF-8)”  – <?xml…


ActiveX コントロールに含まれるプロパティ ページの動作について

こんにちは、Visual Studio サポートチームです。 今回は、ActiveX コントロールに含まれるプロパティ ページの動作についてご案内いたします。 ActiveX コントロールには、コントロールのプロパティ値を確認したり変更するために便利なプロパティ ページを開発者が追加することができます。 1 つの ActiveX コントロールに複数のプロパティ ページを持つことも可能ですが、このプロパティ ページの遷移や、プロパティ ページ内の変更の適用を通知するタイミングは、プロパティ シート側の動作に依存します。 Visual Studio のデザイナーにおけるプロパティ シートの動作は、Visual Studio のバージョンやデザイナーの種類によっても異なっており、プロパティ ページを切り替えた際に自動的に適用されるものや、プロパティ ページを切り替えても自動的には適用されず個別に [適用] ボタンを押下する必要があるものがあります。 例として A)  .NET Framework の Windows フォーム デザイナーの場合にはプロパティ ページの切り替えで値が適用されますが、B) MFC のダイアログ エディターの場合にはページの切り替えでは変更は反映されず、「適用」ボタンを押下する必要があります。   A)  .NET Framework の Windows フォーム デザイナーの場合 B) MFC のダイアログ エディターの場合 このようなプロパティ ページ上での値の変更が適用されるタイミングを、ActiveX コントロールの開発者が制御することはできません。このため、例えば、ページの切り替えにより変更適用のためのメソッドが呼び出されることを前提としたコントロールの設計は避けていただく必要がある点にご留意ください。 また、ActiveX コントロールのご利用者様におかれましては、プロパティ…


Visual C++ の正規表現ライブラリで発生するバージョン間での動作の違いについて

こんにちは、Visual Studio サポート チームです。 今回は、Visual C++ の正規表現ライブラリ (regex) で発生するバージョン間での動作の違いについてご案内いたします。   Visual C++ では 2008 SP1 で Technical Report 1 (TR1) の regex を取り入れており、以降のバージョンでご利用いただけます。 Visual C++ の regex は C++ 標準に準拠しており、原則としてバージョン間でも互換性がございますので、以前のバージョンの Visual C++ で regex を使用していたコードは、多くの場合新しいバージョンの Visual C++ でもそのまま動作します。 ただし、不具合の修正や標準への準拠などに伴って、バージョン間で動作が異なる部分も稀にございます。特に、regex に限ったことではございませんが、いわゆる処理系依存として C++ 標準に規定されていない部分は、互換性に影響がある変更点としてのご案内なく動作が変わる可能性があります。   具体的な例を挙げると、例えば C++ の regex では正規表現の処理で発生したエラーを regex_error クラスのオブジェクトをスローして通知することとなっていますが、error_complexity、error_space、error_stack といった種類のエラーは、同一の入力条件であっても、Visual C++ のバージョンや実行環境が違えば発生状況も異なることがあります。これは、Visual Studio のバージョン間で、バックトラッキングを伴う検索処理の実装や、複雑度の基準の変更があったことなどが影響しています。…


Visual Studio 2013 が 異常終了 (クラッシュ) する

[更新: 2017年 11月 6日] 本投稿でご説明した 問題は 2017年 11月 6日時点では既に修正されております。現在はVisual Studio 2013 Update5以外のバージョンでもVisual Studio 2013の起動、サインインにおいて本問題は発生いたしません。ご不便、ご迷惑をおかけいたしまして、大変申し訳ございませんでした。 こんにちは、Visual Studio サポートチームです。 今月に入り、Visual Studio 2013 が起動直後に異常終了する、サインインができなくなったという報告をいただいています。 詳細については開発部門と協力し現在調査中ですが、Visual Studio 2013 をご使用いただく際のライセンス認証を行うサーバー側の処理での何らかの問題により発生しているものと認識し、調査を進めています。 調査状況に進捗があり次第、本 Blog も更新いたします。 なお、本問題は Visual Studio 2013 のみで確認されており、Visual Studio 2015、2017 や、オンラインでのライセンス認証を行わない Visual Studio 2012 以前のバージョンでは問題は発生していません。 また、この問題は発生する環境では必ず発生しますので、現時点で問題なく Visual Studio 2013 をご使用いただけていたり、サインインが完了している場合には、今回の問題には合致しませんのでご安心ください。   現時点での対処策について ——————————————– 現在までの調査状況では、Visual Studio 2013 に最新の Update 5 をご適用いただくことで正常に動作することを確認しています。…