2012-02-03 11 views
1

プロジェクトの2つの構成を同時にビルドしたいと考えています。私がリリースをビルドしたいとき、私もデバッグをビルドしたいとしましょう(その反対は真ではありません)。 Use a single Visual Studio solution to build both x86 and x64 at the same time?で始まる私は.csprojVisual Studioでプロジェクトの複数の構成を同時にビルドすることはできませんが、MSBuildで行うことができます

<Target Name="AfterBuild"> 
    <MSBuild Condition=" '$(Configuration)' == 'Release' " Projects="$(MSBuildProjectFile)" Properties="Configuration=Debug" RunEachTargetSeparately="true" /> 
</Target> 

に追加しようとしたと私はMSBuildの

MSBuild ConsoleApplication64.csproj /p:Configuration=Release /p:Platform=x86 

を通じてプロジェクトをビルドしようとした場合、それは正常に動作します。 2つの構成が正しく構築され、すべてが良好です。私は、Visual Studioでそれを構築しようとした場合

問題がある:リリースが正しく構築され、それはデバッグバージョンを構築し始め、それが「OBJ \ X86 \デバッグから私

コピーファイルを提供します(2868,9):エラーMSB3021:ファイル "obj \ DebugApplication64.exe"をコピーすることができませんでした:\ bin \ Debug \ ConsoleApplication64。 c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets x86 \ Debug \ ConsoleApplication64.exe "を" bin \ Debug \ ConsoleApplication64.exe "にコピーします。 'obj \ x86 \ Debug \ ConsoleApplication64.exe'ファイルが見つかりませんでした。

前提条件:

英語を並べて表示英語を並べて表示する機械翻訳機械翻訳版の免責を確認する対象製品このプロジェクトは、C#4.0用の空のコンソールアプリケーションです(技術的には問題はありませんが、問題を再現できます)。

(私は冗長性を有効にしてそれらのメッセージ持つように次の点に注意してください。ツール - >オプション - >プロジェクトおよびSolutions-からノーマル>を構築し、実行 - >のMSBuildプロジェクトのビルド出力冗長

出力を比較した後半分

リリース:

タスク「Cscに」(タスクID二つの「半分」の差がで「作業」半分CSCはそうではない、他の一つに、呼び出されたということです実行します:13)
c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Csc.exe/noconfig /nowarn:1701,1702/nostdlib + /プラットフォーム:x86/errorreport:プロンプト/警告:4 /define:TRACE/reference: "C:\ Programmi \ Reference アセンブリ\ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ Microsoft.CSharp.dll " /参照:" C:\ Programmi \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ mscorlib.dll " /reference 「C:¥Programmi¥Reference Assemblies¥Microsoft¥Framework.NETFramework¥v4.0¥Profile¥Client¥System.Core.dll」 /reference: "C:¥Programmi¥Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.dll " /debug:pdbonly/filealign:512/optimize + /out:obj \ x86 \ Release \ ConsoleApplication64。 exe/target:exe Program.cs プロパティ\ AssemblyInfo.cs "C:\ Documentsと 設定\ m.alberti-cons \ Impostazioni locali \ Temp.NETFramework、Version = v4.0、Profile = Client.AssemblyAttributes.cs " (TaskId:13)タスク" Csc "の実行を完了しました。(タスクID:13)半分

デバッグ:

タスク "Cscに"(タスクID:41) 完了実行中のタスク "Cscに"。 (タスクID:41)私は2人の半分は同じDefineConstantsを使用するならば、何の問題も、すべての作品がないことに気付きましたが、彼らは、リリース/デバッグのように(異なる場合、いくつかのより多くのテストの後

)それは動作しません。 :-(

+0

あなたは、まずデバッグ構成でMSBuildの中で構築し、リリース構成で構築しようとしてみていただけますか? – Samselvaprabu

+0

@Samselvaprabuそれは動作しますが、実際には何もしません。デバッグ、ビルドリリース(+デバッグ):エラーなし、ビルドデバッグ、コード行の追加( 'Console.WriteLine(" Hello World ");')、ビルドリリース、デバッグバージョンisn '再構築されましたが、エラーはありません。 – xanatos

+0

Visual Studioの/ p:Platform = x86かanycpuかどうか – Samselvaprabu

答えて

2

あなたは理由として、既に実行マーク目標をスキップするのMSBuildのincremental buildメカニズムのVisual Studioの内部で構築することはできません。ここでの本当の問題は、このインクリメンタルビルドを分割する方法です。This質問は非常に関連している。

あなたは/verbosity=diagでビルドする場合は、MSBuildのは、これらの束を報告わかります。

ターゲット「AssignTargetPathsは、」スキップ以前は正常にビルド

マイクロソフトではこの動作を認識しており、これを考慮していますby design

私はこれに強くお勧めする可能性のある回避策は、Execタスクを使用して2番目のビルドを呼び出すことです。 Execタスクは、コマンドラインのシェルに過ぎません。コマンドラインシェルは、それをフィードするすべてのものを食べますが、あなたのケースでは、増分ビルドチェーンを壊す可能性があります。

<Exec Command="$(MSBuildToolsPath)\msbuild $(MSBuildProjectFile) /p:Configuration=Debug" Condition=" '$(Configuration)' == 'Release'" /> 
+0

'Target" AssignTargetPaths "をスキップしました。以前は正常に構築されました。」診断ビルドの両方の半分に存在します。私は3つのProjectGroup(一般的なものとDebugとReleaseのもの)で trueを入れてみましたが、何も変更していません。 – xanatos

+0

これは一例に過ぎません。あなたがよく見ると、 '以前は正常にビルドされた'と '誤った条件のためにスキップされた'がたくさんあります。内部的には、VSは再構築しない時期を決定しますが、そのプロセスはハッキングされる可能性があります。 [これはあなたに手がかりを与えるかもしれません](http://stackoverflow.com/q/9130221/147211) – KMoraz

関連する問題