VS2022でVB.NETのアプリケーションを作り、Jenkinsのビルドジョブに乗せようと思ってMSBuildでビルドしようと思ったがエラーでできなくて困り果てていた。
結論
PCに複数のMSBuildがバージョン違いでインストールされており、作ったプロジェクトに対応するバージョンででのビルドが必要だった。
ここに至るまでの顛末
MSBuildはパスが通っていない状態だと、下記のような.NET Frameworkのディレクトリにあるため、コマンドラインで実行ファイルを指定していた。
C:\Windows\Microsoft.NET\Framework\v4.0.30319
まずはビルド確認のためslnファイルだけ指定して実行!
warning MSB4078: プロジェクト ファイル "hogehoge.vbproj" は MSBuild ではサポートされていないため、ビルドできません。
・・・。
ダメではないか。また、エラーを調査。すると、インストーラプロジェクトではMSBuildは使えないので、devenv.comを使えとのこと。
devenv.comってどこにあるんだろ?という疑問にはこの記事が参考になった。
私の場合(VS2022)は、下記にあったのを見つけた。
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe
改めて、devenv.comでビルド。今度は成功!
できたとはいえ、やっぱりMSが推奨するのはMSBuildなので、こちらでビルドできるようにしたい。
そもそもインストール無しで動かしても良さそうなゴミアプリなので、このエラーを何とかしよう。
warning MSB4078: プロジェクト ファイル "hogehoge.vbproj" は MSBuild ではサポートされていないため、ビルドできません。
そこで、再びエラーの詳細を検索すると、MSBuildにもバージョンがあって、古いとNGみたいな文献を発見。
実際、PCには複数のVersionのMSBuildが存在することが分かった。そこで、最新のMSBuildを使ってビルドを試す。
"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" "hogehoge.sln"
すると・・・。
ビルドに成功しました。
0 個の警告
0 エラー
できた!!単純にバージョンの違いだったか。
おまけ
複数のバージョンの依存関係に悩まされるときは、こういう回避方法もあるようだ。