46

以前のバージョンの 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 への正しいパスを指定することが難しくなります。

Visual Studio 2017 RC のバージョンの Msbuild をバット ファイルから呼び出す最良の方法は何ですか? それとも PowerShell からですか?

4

9 に答える 9

25

サポートされている方法

VS2017 のセットアップ エンジンには、VS2017 のどのインスタンスがインストールされているかに関する情報を照会できる相互運用 API があります。そのためのNuGet パッケージと、インストール パスを含むクエリ方法のサンプルもあります。バッチまたは PS ファイルで使用する場合は、サンプル アプリを書き直してスクリプトから呼び出し、必要な情報を出力するだけです。

サポートされていない方法

VS セットアップ エンジンは、そのデータのストアを の下に保持します%ProgramData%\Microsoft\VisualStudio\Packages\_Instances。VS2017 の各インスタンス用のフォルダーがあり、そのフォルダー内にはstate.json、インストール パスなど、そのインストールに関する情報を含むファイルがあります。

.json ファイルから情報を抽出する必要があるため、スクリプト ファイルから呼び出すアプリを作成するか、スクリプトで直接解析ロジックを作成するかを選択できます。 JSON スキーマまたはファイルの場所が変更される可能性があるため、これは明らかに脆弱です。

力ずくの方法

デフォルトのインストール パスを使用していると仮定すると、msbuild.exe を再帰的に検索できます%ProgramFiles(x86)%\Microsoft Visual Studio\(VS インスタンスごとに 32 ビットと 64 ビットの msbuild.exe があるようです)。これは、スクリプト ファイル内で実行するのがおそらく最も簡単ですが、デフォルトのインストール パス (または検索するハードコードされたパス) に依存します。

開発環境の要件を変更する

vsdevcmd.batあなたができる最後のことは、開発者がVS開発環境を使用するために使用する(または何らかの方法で呼び出す)ことを要求することです。これにより、MSBuild と、さらに VS 環境のその他のツールが %PATH% に取得されます。これは開発チームに要件を課しますが、msbuild.exe を見つけるために常に公式にサポートされている方法です。

于 2016-11-20T09:36:32.527 に答える
3

また、CI サーバーのバット ファイルからビルド ツールを実行します。新しく見つけた場所は次のとおりです。

%programfiles(x86)%\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe

于 2017-03-15T21:34:45.467 に答える
1

.NET Core ツール プレビュー 3 以降をインストールしている場合、(.NET Core プロジェクトをビルドしていない場合でも) dotnetCLI は既定で利用できるはずなので、試してみることができます。参照https://github.com/dotnet/docs/blob/master/docs/core/preview3/tools/dotnet-msbuild.md%PATH%dotnet msbuild

于 2017-02-07T18:00:55.323 に答える
-1

SO 私はコミュニティ エディション 2017 を持っています。パスは C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\ です。

このスレッドの他のソリューションでは、例外がスローされました。

于 2018-01-25T19:28:10.150 に答える