web-dev-qa-db-ja.com

msbuildを使用してソリューションのプロジェクトファイルを指定する

Devenv.comで行うようにmsbuildを使用してソリューションの特定のプロジェクトをビルドするためのコマンドラインが必要です。devenv.comでは、次のコマンドラインを使用してソリューションのプロジェクトを指定できます。

devenv.com /Build Release|x86 test.sln /project "testproject"

上記のコマンドラインを使用すると、devenv.comを使用してtest.slnにtestprojectをビルドできます。同じソリューションのmsbuildのコマンドラインは何ですか。

ありがとう

100
TVSuser1654136
msbuild test.sln /t:project /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

/tに割り当てられているのはソリューションのプロジェクト名であり、プロジェクトファイル名とは異なる場合があることに注意してください。

また、 方法:MSBuild.exeを使用してソリューション内の特定のターゲットをビルドする

プロジェクト名に%$@;.()のいずれかの文字が含まれている場合、または'は、指定されたターゲット名の_に置き換えます。

複数のプロジェクトを一度にビルドすることもできます。

msbuild test.sln /t:project;project2 /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

再構築またはクリーニングするには、/t:project/t:project:cleanまたは/t:project:rebuildに変更します

172
Easton L.

MSBuildは、実際にはソリューションではなくプロジェクトを使用して機能します。このソリューションは、内部的にMSBuildの一時プロジェクトファイルに解析するためにのみ使用されます。次のコマンドを実行することにより、MSBuildを介して目的のプロジェクトを直接ビルドできるはずです。

"msbuild testproject /p:Configuration=Release /p:Platform=x86"

ソリューションの代わりにプロジェクトを直接使用する可能性があることがわかっている1つの大きな問題があります:プロジェクトへの参照を追加してビルドシステムに依存関係を自動的に解決させるのではなく、ソリューションを使用してプロジェクト間の依存関係を表現する場合。

Slnファイルを使用してビルドの順序を強制する場合、これらの依存関係を直接projファイルに組み込み、slnから削除することをお勧めします。これにより、MSBuildからprojファイルを直接呼び出すことができ、プロジェクトはすべて追加の作業なしで独立してビルドされます。ビルド入力としてではなく、Visual Studioでの作業を簡単にするために、slnファイルをプロジェクトのグループとして実際に扱う必要があります。

14
Mark Smith

将来の求職者への情報として投稿する

以下をビルドスクリプトに追加し、1回実行します。これにより、msbuildが実際に使用する正確なターゲットおよびその他の情報が生成されます。

例:プロジェクト名またはフォルダーに.がある場合、msbuildは_の代わりに.を期待します。

set MSBuildEmitSolution=1

情報を取得した後、ビルドスクリプトを必要な詳細で更新します。

7
freshprinze

追加情報を追加するために、プロジェクトフォルダーでmsbuildを実行すると、既定でプロジェクトファイルがビルドされます。

>msbuild

この方法でmsbuildを使用するには、さまざまなバリエーションがあります。 projファイルを直接指定できます。

>msbuild helloworld.csproj -t:Build.

使用法、projファイルの要件、およびソリューションの代わりにプロジェクトをビルドする利点については、msbuildのドキュメントを確認してください。

MS MSBuildドキュメント

上記のmark-smithが述べたように、この方法で構築することには利点があります。

1
C J

これを行うには、プロジェクトのtarget-nameが何であるかを知る必要がありますが、必ずしもプロジェクト名ではありません。

これを見つける1つの方法は、MSBuildEmitSolutionという特別な環境変数を1の値に設定した後、意図したパラメーターでSLNに対してMSBuildを使用することです。

set MSBuildEmitSolution=1
msbuild my_stuff.sln /t:rebuild /p:Configuration=Release /p:Platform=x64

ネストされたディレクトリ内のターゲットの非常に具体的な名前のため、最近これを行う必要がありました。生成されたファイルmy_stuff.sln.metaprojから次の行が見つかりました。

<Target Name="Utils\Firewall\FirewallUtils:Rebuild">

つまり、使用するコマンドラインは最終的には、

msbuild my_stuff.sln /t:Utils\Firewall\FirewallUtils:Rebuild /p:Configuration=Release /p:Platform=x64
0