IDE で実行する Visual Studio のビルドを、コマンド ラインから実行できるスクリプトに変換するにはどうすればよいでしょうか?
11 に答える
VS2008 では、これを行うことができます。
devenv solution.sln /build configuration
\Windows\Microsoft.NET\Framework\[YOUR .NET VERSION]\msbuild.exe
多くのコマンド ライン パラメータがありますが、最も単純なものは次のとおりです。
msbuild.exe yoursln.sln
最も簡単な方法: ソリューションまたはプロジェクト ファイルを含むディレクトリに移動し、実行msbuild
します (Visual Studio 2005 以降を使用していると仮定します)。
より柔軟な方法:
- MSBuild リファレンスを読んでください。特にMSBuild コミュニティ タスク プロジェクトをインストールした後は、大量のカスタマイズが可能です。
- NAntを使用します。MSBuild よりも長く存在し、コミュニティ サポートも充実していますが、Visual Studio で作成された既存のプロジェクト ファイルを拡張するのではなく、最初からプロジェクト ファイルを作成する必要があります。
NAntとMSBuildは、 .NETでのビルドを自動化するための最も一般的なツールです。スタック オーバーフローの質問Best .NET build toolで、それぞれの長所と短所に関する議論を見つけることができます。
これは、バッチ スクリプトを使用して、同じソリューションの x86 および x64 構成のコマンド ライン ビルドを完全に自動化するために使用しているスクリプトです。
これは、ビルドにセットアップ プロジェクトがある場合に機能する DevEnv.exe に基づいています (msbuild はセットアップ プロジェクトのビルドをサポートしていません)。
セットアップは、x86 ネイティブ コンパイラと x64 クロス コンパイラを使用する Visual Studio 2010 セットアップを備えた 32 ビット Windows 7 であると想定しています。64 ビット Windows を実行している場合、セットアップに応じて、バッチ スクリプトでx86_amd64をamd64に変更する必要がある場合があります。これは、Visual Studio がProgram Filesにインストールされ、ソリューションがD:\MySolnにあることを前提としています。
buildall.batというファイルを作成し、これを追加します。
D:
cd "D:\MySoln"
if "%1" == "" goto all
if %1 == x86 goto x86
if %1 == x64 goto x64
:x86
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
goto eof
:x64
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
goto eof
:all
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
if %ERRORLEVEL% NEQ 0 goto eof
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
goto eof
:eof
pause
さらに 2 つのバッチ スクリプトを作成します。
crosscompilex86.batを使用して x86 ビルドのリリース バージョンをビルドし、これを含めます。
devenv MySoln.sln /clean "Release|x86"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
devenv MySoln.sln /rebuild "Release|x86"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
crosscompilex64.batを使用して x64 ビルドのリリース バージョンをビルドし、これを含めます。
devenv MySoln.sln /clean "Release|x64"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
devenv MySoln.sln /rebuild "Release|x64"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
ここで、3 つのバッチ ファイルすべてを MySoln.sln と共にソリューション フォルダーに配置します。次のコマンドを実行するショートカットをデスクトップに作成することで、x86 と x64 の両方のリリース バージョンをビルドできます。
- すべてビルド -> D:\MySoln\buildall.bat
- x86 リリースのみをビルド -> D:\MySoln\buildall.bat x86
- x64 リリースのみをビルド -> D:\MySoln\buildall.bat x64
AnyCPU などの別の構成を使用している場合は、それに応じて上記のスクリプトをカスタマイズする必要があります。
UppercuTを見てください。それはあなたの支出に見合うだけの価値があり、あなたが探していることやそれ以上のことをします。
UppercuTはNAntを使用してビルドし、非常に使いやすいビルドフレームワークです。
自動ビルドは、(1)ソリューション名、(2)ソース管理パス、(3)ほとんどのプロジェクトの会社名と同じくらい簡単です。
ここでいくつかの良い説明:UppercuT
これは、 VS 2010デバッグ構成用にmsbuildを使用した私のバッチ ファイルです。
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"
iTegra.Web.sln /p:Configuration=Debug /clp:Summary /nologo
Visual Studio 2005では、すべてのプロジェクト ファイル (少なくとも .NET ベースのプロジェクトの場合) は実際のMSBuildファイルであるため、コマンド ラインで MSBuild を呼び出してプロジェクト ファイルに渡すことができます。
肝心なのは、ビルド プロセスを実際に制御したい場合は、NAntや MSBuildなどの「ビルド スクリプト言語」を使用する必要があるということです(他にもありますが、これらは現在主流の言語です)。
Visual Studio 2003の C++ プロジェクトでこれを行う必要があったため、これが Visual Studioの新しいバージョンにどの程度関連しているかはわかりません。
実行可能ファイルが作成されるディレクトリに、ファイルがありBuildLog.htm
ます。そのファイルをブラウザーで開き、次のような各セクションを開きます。
Creating temporary file "c:\some\path\RSP00003C.rsp" with contents
[
/D "WIN32" /D "_WINDOWS" /D "STRICT" /D "NDEBUG" ..... (lots of other switches)
.\Project.cpp
.\Another.cpp
.\AndAnother.cpp
".\And Yet Another.cpp"
]
Creating command line "cl.exe @c:\some\path\RSP00003C.rsp /nologo"
角括弧内の内容 (角括弧は含まない) で .rsp ファイルを作成し、好きな名前を付けます。絶対パスに問題があったことを覚えているようなので、すべてのパスが相対パスであることを確認する必要があるかもしれません。
次に、ビルド スクリプトで、BuildLog.htm
ファイルからコマンド ラインを追加しますが、.rsp ファイル名を使用します。
cl.exe @autobuild01.rsp /nologo
(cl.exe だけでなく link.exe セクションもあることに注意してください)