Devenv.comで行うようにmsbuildを使用してソリューションの特定のプロジェクトをビルドするためのコマンドラインが必要です。devenv.comでは、次のコマンドラインを使用してソリューションのプロジェクトを指定できます。
devenv.com /Build Release|x86 test.sln /project "testproject"
上記のコマンドラインを使用すると、devenv.comを使用してtest.slnにtestprojectをビルドできます。同じソリューションのmsbuildのコマンドラインは何ですか。
ありがとう
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
に変更します
MSBuildは、実際にはソリューションではなくプロジェクトを使用して機能します。このソリューションは、内部的にMSBuildの一時プロジェクトファイルに解析するためにのみ使用されます。次のコマンドを実行することにより、MSBuildを介して目的のプロジェクトを直接ビルドできるはずです。
"msbuild testproject /p:Configuration=Release /p:Platform=x86"
ソリューションの代わりにプロジェクトを直接使用する可能性があることがわかっている1つの大きな問題があります:プロジェクトへの参照を追加してビルドシステムに依存関係を自動的に解決させるのではなく、ソリューションを使用してプロジェクト間の依存関係を表現する場合。
Slnファイルを使用してビルドの順序を強制する場合、これらの依存関係を直接projファイルに組み込み、slnから削除することをお勧めします。これにより、MSBuildからprojファイルを直接呼び出すことができ、プロジェクトはすべて追加の作業なしで独立してビルドされます。ビルド入力としてではなく、Visual Studioでの作業を簡単にするために、slnファイルをプロジェクトのグループとして実際に扱う必要があります。
将来の求職者への情報として投稿する
以下をビルドスクリプトに追加し、1回実行します。これにより、msbuildが実際に使用する正確なターゲットおよびその他の情報が生成されます。
例:プロジェクト名またはフォルダーに.
がある場合、msbuildは_
の代わりに.
を期待します。
set MSBuildEmitSolution=1
情報を取得した後、ビルドスクリプトを必要な詳細で更新します。
追加情報を追加するために、プロジェクトフォルダーでmsbuildを実行すると、既定でプロジェクトファイルがビルドされます。
>msbuild
この方法でmsbuildを使用するには、さまざまなバリエーションがあります。 projファイルを直接指定できます。
>msbuild helloworld.csproj -t:Build.
使用法、projファイルの要件、およびソリューションの代わりにプロジェクトをビルドする利点については、msbuildのドキュメントを確認してください。
上記のmark-smithが述べたように、この方法で構築することには利点があります。
これを行うには、プロジェクトの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