Visual studio ビルド 指定されたファイルが見つかりません

最終更新日:年月日(月 日、西暦)

依存関係について

注意: Microsoft 社のサポート終了にともない、Visual Studio 2008 以前のバージョンは Incredibuild のサポート対象外となりました。

Incredibuild は複数のファイルやプロジェクトを同時にビルドするため、ビルド時の潜在的な問題やエラーを回避するためには、ソリューション/ワークスペース内のファイルやプロジェクト間の依存関係を正しく定義しなければなります。

このページをよく読み理解しておくことで、依存関係の問題が発生した場合にトラブルシューティングにかかる時間を短縮できるでしょう。

プロジェクト レベルの依存関係

ソースファイルの依存関係

ソースファイルの依存関係は自動的に処理されます。インクリメンタル ビルドを実行すると、古いファイルが直接コンパイルされるか、(#include や #import ステートメントなどを使って) 古いファイルが参照されます。

プリコンパイル済みヘッダー

プリコンパイル済みヘッダーを使用するファイルは、ヘッダーのビルドが終わるまでコンパイルを待機します。なお、「プリコンパイル済みのヘッダーを使用する」MSVC のデフォルトのオプションがそのままでも、stdafx.h が実質的に空の場合はプロジェクトから stdafx.cpp を削除して、プロジェクトの設定を [プリコンパイル済みヘッダーを使用しない] にすることをお勧めします。

ファイルレベルのカスタム ビルド ステップ

ファイルレベルのカスタム ビルド ステップを定義する場合は、1 つまたは複数の出力ファイルを指定します。プロジェクトに含まれるファイルレベルのカスタム ビルド ステップが当該プロジェクトのソースファイルから参照されるファイルを生成する場合、このステップで生成される全ファイルが出力ファイル一覧に含まれていなければなりません。例えば、my.cpp ファイルに含まれるヘッダー ファイル lang.hlang.h は、別のファイルlang.y のために定義されたカスタムビルドステップによって生成されます。カスタムビルドステップは、出力ファイルとしてlang.h を定義していません。カスタム ビルド ステップ lang.y が終わる前にリモート Agent 上で my.cpp のコンパイルが始まり、コンパイル エラー (「ファイルが見つかりません」) や最悪の場合は古いバージョンの lang.h が使用されるという事態が起こります。

ファイルレベルのカスタム ビルド ステップの 1 つをほかのステップの前に実行するには、ステップのコマンドに次のディレクティブを追加します。

rem Incredibuild_RunFirst

ソリューション/ワークスペースレベルの依存関係

ソリューション/ワークスペースのプロジェクト間の依存関係は [Project] > [Dependencies] で定義します。

プロジェクト間の依存関係を定義する際は以下のケースに注意してください。

リンクの依存関係

プロジェクトがソリューション/ワークスペースのほかのプロジェクトが作成したライブラリとリンクする場合は、そのプロジェクトをサブプロジェクトとして含む必要があります。これは LIB ファイルを準備する前にリンク作業が開始されないようにするために必要です。Visual C++ では正常にビルドされるソリューション/ワークスペースを Incredibuild でビルドすると失敗する場合は、この種の依存関係を宣言していないことがあります。

MIDL、カスタム、プレリンク、ポストビルド、プレビルド ステップ

プロジェクトがソリューション/ワークスペースのほかのプロジェクトのコンパイルに影響を与えるビルド ステップを含む場合は、そのプロジェクトをサブプロジェクトとして含む必要があります。例えば、コード生成ツール (YACC や LEXX など) や出力ファイルを別のプロジェクトが使用する場所にコピーするステップなどです。ほかにもよくあるケースとして、ソースファイルに別のプロジェクトで MIDL コンパイラが生成したファイル (TLB ファイル、ヘッダー ファイルなど) へのプリプロセッサ リファレンスが含まれる場合があります。ソリューション/ワークスペースで 2 つのプロジェクト間の依存関係が正しく定義されていない場合、誤ったバージョンのファイルが使用されたり、コンパイル エラーが発生したりすることがあります。

カスタム、プレリンク、ポストビルド、プレビルド ステップの使用とビルド速度に関する注意事項:「プロジェクト A」のサブプロジェクトである「プロジェクト B」がプロジェクトレベルのカスタム ビルド ステップ、プレリンク ステップ、ポスト ビルド ステップのいずれかを含む場合を考えてみます。この場合「プロジェクト A」は「プロジェクト B」のステップが処理されるまでコンパイルを待機します。依存関係が正しく定義されていれば、プロジェクトは正常にビルドされますが、「プロジェクト A」のソースファイルに「プロジェクト B」のステップが不要な場合はビルドが大幅に遅くなる可能性があります。この場合、「Incredibuild_AllowOverlap」ディレクティブを使って「プロジェクト A」のコンパイルを待機しないように指示します。

Visual Studio でデバッグを開始するとデバッグ ターゲットの実行ファイルが見つからないエラーが発生しデバッグ開始できない現象について紹介します。

現象の確認

Visual Studio でデバッグを開始します。

下図のダイアログが表示され、次のエラーメッセージが表示されます。実行ファイルが見つからないため、デバッグが開始できません。

Visual studio ビルド 指定されたファイルが見つかりません

エラーメッセージ

デバッグ ターゲット '(実行ファイルのパス)' が見つからないため、Visual Studio でデバッグを開始できません。プロジェクトをビルドしてからやり直してください。 または、OutputPath および AssemblyName プロパティをターゲット アセンブリの正しい場所に適切に設定してください。

発生環境

古いVisual Studio で作成されたプロジェクトを新しいバージョンのVisual Studioに変換したプロジェクトで発生することがあります。

原因

出力パスの設定が違っているなどいくつかの原因がありますが、よくある原因として、デバッグ開始時にビルドする設定になっていない可能性があります。
既にビルドされている場合には、デバッグが開始されますが変更したコードが反映されない現象になります。こちらの記事も参照して下さい。

対処法

ソリューションエクスプローラでプロジェクトのノードをクリックして選択します。右クリックしてポップアップメニューを表示します。 メニューの[プロパティ]の項目をクリックします。

プロジェクトのプロパティウィンドウが表示されます。出力パスや対象プラットフォームが正しい設定になっているか確認します。 今回古いプロジェクトのため、対象プラットフォームが "x86" になっています。最新の環境に反映させるため "Any CPU" や "x64" に変更します。

続いてソリューションエクスプローラーでツリービューのルートノードのソリューションのノードをクリックして選択します。 右クリックしてポップアップメニューを表示します。メニューの[構成マネージャー]をクリックします。

[構成マネージャー]のダイアログが表示されます。エラーが発生したプロジェクトの[ビルド]のチェックボックスを確認します。チェックボックスがオフになっています。

チェックボックスをクリックして[ビルド]のチェックボックスにチェックを付けます。設定後[閉じる]ボタンをクリックしてダイアログを閉じます。

デバッグを開始して、エラーが表示されないことを確認します。

最終更新日: 2020-05-27

作成日: 2020-05-26