MSBuildを使用して、指定されたターゲットプラットフォームでソリューションを構築しようとしています(x86とx64の両方のバイナリが必要です)。これは私がそれを試した方法です:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
ただし、プラットフォームが「任意のCPU」と異なる場合、ビルドは常に失敗します。何が間違っていますか?
これは、MSBuildが出力するwhile出力です。
C:\ WINDOWS\Microsoft.NET\Framework\v3.5> MsBuild SolutionPath\Solution.sln/t:Rebuild/p:Configuration = Release/p:Platform = "x86" Microsoft(R)Build Engineバージョン3.5.30729.1 [ Microsoft .NET Framework、バージョン2.0.50727.3082]著作権(C)Microsoft Corporation 2007。
ビルドは1.7.2010 8:28:10から開始されました。ノード0上のプロジェクト "SolutionPath\Solution.sln"(ターゲットt(s)を再構築)。 SolutionPath\Solution.sln:エラーMSB4126:指定されたソリューション構成 "Release | x86"は無効です。構成およびプラットフォームのプロパティを使用して有効なソリューション構成を指定してください(例:MSBuild.exe Solution.sln/p:Configuration = Debug/p:Platform = "Any CPU")。または、デフォルトのソリューション構成を使用するには、それらのプロパティを空白のままにしてください。プロジェクト「SolutionPath\Solution.sln」のビルド完了(ターゲットの再構築)-失敗しました。
ビルドに失敗しました。
"SolutionPath\Solution.sln"(ターゲットの再構築)(1)->(ValidateSolutionConfigurationターゲット)-> SolutionPath\Solution.sln:エラーMSB4126:指定されたソリューション構成 "Release | x86"は無効です。 ConfigurationプロパティとPlatformプロパティを使用して有効なソリューション構成を指定してください(例:MSBuild.ex e Solution.sln/p:Configuration = Debug/p:Platform = "Any CPU")。または、デフォルトのソリューション構成を使用するには、これらのプロパティを空白のままにしてください。
0 Warning(s) 1 Error(s)
経過時間00:00:00.03
Devenvを使用してx86/x64用にビルドしようとすると完全に機能しますが、Visual Studioの必要なバージョンをすべてインストールせずにビルドサーバーをセットアップしようとしています。ちなみに、(。NET framework 4をサポートする)より良い無料のツールがある場合は、そのことを聞きたいです。
x86およびx64のソリューションを構築する場合、ソリューション両方のプラットフォーム用に構成する必要があります。実際には、任意のCPU構成があります。
特定のプロジェクトで使用可能な構成を確認するには、プロジェクトファイル(*.csproj
など)を開き、右のPropertyGroup
を持つCondition
を探します。
x86
のRelease
モードでビルドする場合、プロジェクトファイルに次のようなものが必要です。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
...
</PropertyGroup>
構成を作成および編集する方法 (MSDNで)
MSBuildまたはTeamcityでコマンドラインを使用
MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64
または、より短い形式を使用します。
MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64
とにかくプロジェクトでプラットフォームを設定する必要がある場合は、Julien Hoarauの回答をご覧ください。
コマンドラインからこれを実行しようとしている場合、マシン全体の環境変数「Platform」が設定されており、逆に作業しているという問題が発生している可能性があります。通常のWindowsコマンドウィンドウの代わりにVS2012コマンドウィンドウを使用すると、これを再現できます。
コマンドプロンプトで次を入力します。
プラットフォームを設定
VS2012コマンドウィンドウで、「X64」の値がプリセットされています。それは私のソリューションファイルにあるものを妨げるようです。
通常のコマンドウィンドウでは、「set」コマンドを実行すると「variable not defined」というメッセージが表示されますが、これは問題ありません。
上記の「set」コマンドの結果が環境変数値を返さない場合は、準備ができているはずです。