LoginSignup
5
2

More than 5 years have passed since last update.

MsBuild.exeでビルドエラー

Last updated at Posted at 2017-03-15

VisualStudioではビルドできるのに、MsBuildでプロジェクトファイルを指定してビルドしようとすると失敗する。「C1083: include ファイルを開けません」
内容を見てみると、プロジェクトファイル内で$(SolutionDir)で指定されている箇所で失敗しているようだ。

MsBuildにはプロジェクトファイルしか渡していないので$(SolutionDir)が解決できないのか。
ググると似たような質問があった。

msbuild - How to "get rid of " $(SolutionDir) when building vs project from outside visual studio - Stack Overflow

「MsBuildで$(SolutionDir)柔軟に指定したい場合は/p:SolutionDir=pathを使えばいいぜ!」とのこと。

試してみた。気づいた注意点を書いておく:

  • 相対パスで指定するならvcxprojファイルからの相対パス
  • 元々の$(SolutionDir)は末尾\付きなのでそれにならう
  • ディレクトリの区切り文字は/
  • MsBuildのオプション指定の/p-pでもよい

例えば以下のような構成:

./                              # カレントディレクトリ
 `- solution/                   # $(SolutionDir)
     |- MySolution.sln          # ソリューションファイル
     `- project/                # $(ProjectDir)
         `- MyProject.vcxproj   # プロジェクトファイル

であればこんな感じに書ける筈:

MsBuild ./solution/project/MyProject.vcxproj -p:SolutionDir=../

プロジェクトファイル中で$(SolutionDir)を使わないようにしてもよい。
$(ProjectDir)でがんばろう。

そもそもプロジェクトファイルなのだから$(SolutionDir)に依存しない方が健全に思える。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2