MSBuildの以前のバージョンは、次の場所にあります:%programfiles(x86)%\msbuild\<version>\bin\msbuild.exe.
ただし、Visual Studio 2017RCの場合、パスは%programfiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe
です。インストールの種類:エンタープライズ、コミュニティ、またはプロフェッショナルは、パスの一部であるようです。そして、それは、異なるバージョンのVisual Studio 2017を備えた多くの異なるコンピューターで動作するはずのBATファイルでmsbuildへの正しいパスを指定することを困難にします。
BatファイルからVisual Studio 2017 RCのMsbuildのバージョンを呼び出す最良の方法は何ですか?またはPowerShellから?
Microsoftは、Visual Studio 2017以降の場所を見つけるツールを作成しました https://github.com/Microsoft/vswhere
このオプション以降は this ブログ投稿で説明されています。
VS2017のセットアップエンジンには、相互運用APIがあり、VS2017のどのインスタンスがインストールされているかに関する情報を照会できます。それには NuGetパッケージ があり、インストールパスを含む サンプル のクエリ方法もあります。バッチファイルまたはPSファイルで使用するには、サンプルアプリを書き換えて、スクリプトから呼び出して必要な情報を出力するだけです。
VSセットアップエンジンは、%ProgramData%\Microsoft\VisualStudio\Packages\_Instances
の下にデータのストアを保持します。 VS2017の各インスタンス用のフォルダーがあり、そのフォルダー内には、インストールパスなど、そのインストールに関する情報を含むstate.json
ファイルがあります。
.jsonファイルから情報を抽出する必要があるため、スクリプトファイルから呼び出すアプリを作成するか、スクリプトで解析ロジックを直接作成するオプションがあります。 JSONスキーマまたはファイルの場所が変更される可能性があるため、これは明らかに脆弱です。
デフォルトのインストールパスを使用している場合、%ProgramFiles(x86)%\Microsoft Visual Studio\
の下でmsbuild.exeを再帰的に検索できます(VSインスタンスごとに32ビットおよび64ビットのmsbuild.exeがあるようです)。これはおそらくスクリプトファイル内で行うのが最も簡単ですが、デフォルトのインストールパス(または検索対象のハードコーディングされたパス)に依存しています。
最後にできることは、VS開発環境を使用するために、開発者がvsdevcmd.bat
を使用する(または何らかの方法で呼び出す)ことを要求することです。これにより、MSBuildおよびVS環境のその他のツールが%PATH%に追加されます。これは開発チームに要件を課しますが、msbuild.exeを見つけるために常に公式にサポートされる方法です。
最も簡単な方法...
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe
まだマシン上のmsbuildの最新バージョンを探し、代わりに使用可能な場合は古いバージョンにフォールバックしようとしている人々のためにこれを投稿します。 powershellのこのスニペットは、簡単に batファイルから呼び出される であるトリックを行うことがわかります。
Function Find-MsBuild([int] $MaxVersion = 2017)
{
$agentPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe"
$devPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe"
$proPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe"
$communityPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
$fallback2015Path = "${Env:ProgramFiles(x86)}\MSBuild\14.0\Bin\MSBuild.exe"
$fallback2013Path = "${Env:ProgramFiles(x86)}\MSBuild\12.0\Bin\MSBuild.exe"
$fallbackPath = "C:\Windows\Microsoft.NET\Framework\v4.0.30319"
If ((2017 -le $MaxVersion) -And (Test-Path $agentPath)) { return $agentPath }
If ((2017 -le $MaxVersion) -And (Test-Path $devPath)) { return $devPath }
If ((2017 -le $MaxVersion) -And (Test-Path $proPath)) { return $proPath }
If ((2017 -le $MaxVersion) -And (Test-Path $communityPath)) { return $communityPath }
If ((2015 -le $MaxVersion) -And (Test-Path $fallback2015Path)) { return $fallback2015Path }
If ((2013 -le $MaxVersion) -And (Test-Path $fallback2013Path)) { return $fallback2013Path }
If (Test-Path $fallbackPath) { return $fallbackPath }
throw "Yikes - Unable to find msbuild"
}
$msbuildPath = Find-MsBuild 2017
VS 2017がリリースされたので、2セントを追加すると便利だと思いました。
バッチファイルの作成:
メモ帳を開く
以下をコピーしてメモ帳に貼り付け、構築するソリューションを[My Solution Name Here]に置き換えます。
@echo off
:variables
SET msBuildLocation="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
SET solutionDirectory=[My Solution Location Here]
SET batchFileLocation=[BatchFileLocation Here]
cd %solutionDirectory%
echo Building MS files for [My Solution Name Here].
call %msBuildLocation% [My Solution Name].sln /p:Configuration=Debug /m:4 /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false /consoleloggerparameters:Summary;ShowTimestamp;ShowEventId;PerformanceSummary
echo -
echo --------Done building [My solution name here].--------------
echo -
cd %batchFileLocation%
バッチファイルを.bat拡張子を付けて好きな名前で保存します。 .txtの代わりにすべてのファイルを選択してください。そうしないと機能しません。保存した場所にcdコマンドを発行してバッチファイルを呼び出すと、動作するはずです。または、ダブルクリックします。できた.
Visual Studioの私のバージョンはコミュニティです。パスを適切なバージョンに置き換える必要があります。
CIサーバー上のbatファイルからビルドツールも実行します。見つかった新しい場所は次のとおりです。
%programfiles(x86)%\ Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe
.NET Coreツールプレビュー3以降をインストールしている場合、dotnet
CLIがデフォルトで%PATH%
で使用できるはずです(.NET Coreプロジェクトをビルドしていない場合でも) dotnet msbuild
を試すことができます。参照 https://github.com/dotnet/docs/blob/master/docs/core/preview3/tools/dotnet-msbuild.md