[msbuild] configuration の Mixed Platforms

batchでmsbuildを実行するスクリプトを作成していて、PlatformがMixed Platformsの場合、どうすればよいのか調べたのでメモを残す。

Aaron Hallberg Team Build (Build Automation) – Visual Studio North Carolina

Solution Configurations
http://blogs.msdn.com/b/aaronhallberg/archive/2007/06/25/solution-configurations.aspx

に簡潔な説明がある。

まず、個々のprojectのplatformは簡単に言うとpropertyをまとめたものに名前を付けている。projファイルをみると以下のようになっている。 設定値のまとまり、と思っていい。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
</Project>

コマンドラインからは、/pの値として与えることができる。

msbuild.exe CSharpProject.csproj /p:Platform=AnyCPU /p:Configuration=Debug

プロジェクトのPlatformsとConfigurationのデフォルト値は言語に依存する。C++の場合はPlatformがWin32、ConfigurationはRelaseとDebug。C#ではPlatformがAnyCPUでConfigurationはC++の場合と同じDebug/Releaseとなる。

プロジェクトをソリューションとしてまとめた場合、ソリューションのconfigurationは、構成要素となる個々のプロジェクトのConfiguration, Platformをまとめた集合になる。複数プロジェクトで思い思い(!)のPlatformとconfigurationを指定していたとき、Visual Studioがソリューションレベルで自動的に受け皿として作るPlatformがMixed Platformである、ということらしい。
Visual Studioがあらかじめ用意しているソリューションレベルのconfigurationにはX64やWin32、AnyCPUなどがある。これらはMixed Platformのように全部を含むとはかぎらない。
試しに構成マネージャーで ソリューションのconfigurationとしてx64などを指定するとプロジェクトによってはconfigurationからはずれ、チェックマークが消え、ビルドされなくなる。

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。