web-dev-qa-db-ja.com

MSBuildのプラットフォームを指定するにはどうすればよいですか?

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をサポートする)より良い無料のツールがある場合は、そのことを聞きたいです。

128
David Božjak

x86およびx64のソリューションを構築する場合、ソリューション両方のプラットフォーム用に構成する必要があります。実際には、任意のCPU構成があります。

プロジェクトで使用可能な構成を確認する方法

特定のプロジェクトで使用可能な構成を確認するには、プロジェクトファイル(*.csprojなど)を開き、右のPropertyGroupを持つConditionを探します。

x86Releaseモードでビルドする場合、プロジェクトファイルに次のようなものが必要です。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

Visual Studioで構成を作成および編集する方法

Configuration Managerパネルhttp://i.msdn.Microsoft.com/Cc563937.11a492fe-e240-4cdd-9b53-b6aae7224b09(en-us,office.12).jpg

新しいソリューションプラットフォームボタンhttp://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_15.png

新しいソリューションプラットフォームパネルhttp://blogs.msdn.com/blogfiles/habibh/WindowsLiveWriter/9d46e66e51d6_13278/image_18.png

構成を作成および編集する方法 (MSDNで)

97
Julien Hoarau

MSBuildまたはTeamcityでコマンドラインを使用

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64

または、より短い形式を使用します。

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

とにかくプロジェクトでプラットフォームを設定する必要がある場合は、Julien Hoarauの回答をご覧ください。

163
Tomas Kubes

コマンドラインからこれを実行しようとしている場合、マシン全体の環境変数「Platform」が設定されており、逆に作業しているという問題が発生している可能性があります。通常のWindowsコマンドウィンドウの代わりにVS2012コマンドウィンドウを使用すると、これを再現できます。

コマンドプロンプトで次を入力します。

プラットフォームを設定

VS2012コマンドウィンドウで、「X64」の値がプリセットされています。それは私のソリューションファイルにあるものを妨げるようです。

通常のコマンドウィンドウでは、「set」コマンドを実行すると「variable not defined」というメッセージが表示されますが、これは問題ありません。

上記の「set」コマンドの結果が環境変数値を返さない場合は、準備ができているはずです。

13
JJMpls