方法 : 同じソース ファイルを異なるオプションでビルドする
プロジェクトをビルドするとき、異なるビルド オプションで同じコンポーネントをコンパイルします。たとえば、デバッグ ビルドについてはシンボル情報を含めて作成し、リリース ビルドについては、最適化を有効にしてシンボル情報を含めずに作成するといったことができます。また、x86 や x64 など、特定の実行プラットフォームを想定してプロジェクトをビルドすることもできます。どのような場合でも、ビルド構成を制御するために変更する必要があるのは一部のオプションだけで、ほとんどのビルド オプションは同じ設定がそのまま使用されます。MSBuild では、プロパティや条件を使用して異なるビルド構成を作成できます。
プロパティによるプロジェクトの変更
Property 要素は、一時ディレクトリの場所など、プロジェクト ファイル内で頻繁に参照される変数を定義したり、デバッグ ビルドやリリース ビルドなど、複数の構成で使用されるプロパティの値を設定したりするときに使用します。プロパティの詳細については、「MSBuild プロパティ」を参照してください。
プロパティを使用すると、プロジェクト ファイルに変更を加えることなくビルドの構成を変更できます。プロパティの値は、Property 要素および PropertyGroup 要素の Condition 属性を使用して変更できます。MSBuild の条件の詳細については、「MSBuild の条件」を参照してください。
他のプロパティに基づいてプロパティ グループを設定するには
次のように PropertyGroup 要素の Condition 属性を使用します。
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
他のプロパティに基づいてプロパティを定義するには
次のように Property 要素の Condition 属性を使用します。
<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
コマンド ラインからのプロパティの指定
複数の構成に対応したプロジェクト ファイルを作成した場合は、プロジェクトをビルドするたびに構成を変更できる必要があります。MSBuild には、これを実現する機能が備わっています。コマンド ラインで /property または /p スイッチを使用してプロパティを指定できます。
プロジェクトのプロパティをコマンド ラインから設定するには
必要なプロパティおよびプロパティ値を /property スイッチで指定します。次に例を示します。
msbuild file.proj /property:Flavor=Debug
または
Msbuild file.proj /p:Flavor=Debug
コマンド ラインから複数のプロジェクト プロパティを指定するには
プロパティごとに /property スイッチまたは /p スイッチを指定するか、/property スイッチまたは**/p** スイッチを 1 つだけ使用し、複数のプロパティをセミコロン (;) で区切って指定します。次に例を示します。
msbuild file.proj /p:Flavor=Debug;Platform=x86
または
msbuild file.proj /p:Flavor=Debug /p:Platform=x86
環境変数もプロパティと同じように扱われ、MSBuild によって自動的に取り込まれます。環境変数の使用方法の詳細については、「方法 : ビルドで環境変数を使用する」を参照してください。
コマンド ラインに指定されるプロパティ値は、プロジェクト ファイルで同じプロパティに対して設定された値よりも常に優先されます。また、プロジェクト ファイル内の値は、環境変数の値よりも優先されます。
プロジェクトのタグで TreatAsLocalProperty の属性を使用してこの動作を変更できます。この属性で示されているプロパティ名には、コマンド ラインで指定されるプロパティ値は、プロジェクト ファイルの値に優先されません。このトピックの例を後で検索できます。
使用例
次のコード例は、「Hello World」プロジェクトは、デバッグ ビルドとリリース ビルドの作成に使用できる2二つのプロパティ グループが含まれます。
プロジェクトのデバッグ バージョンをビルドする場合は次のように入力します。
msbuild consolehwcs1.proj /p:flavor=debug
プロジェクトのリテール バージョンをビルドする場合は次のように入力します。
msbuild consolehwcs1.proj /p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor of an environment variable called
Flavor is not set or specified on the command line -->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
</PropertyGroup>
<!-- Define the DEBUG settings -->
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
<DebugType>full</DebugType>
<Optimize>no</Optimize>
</PropertyGroup>
<!-- Define the RETAIL settings -->
<PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
<DebugType>pdbonly</DebugType>
<Optimize>yes</Optimize>
</PropertyGroup>
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual C# compilation using input files
of type CSFile -->
<CSC Sources = "@(CSFile)"
DebugType="$(DebugType)"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe" >
<!-- Set the OutputAssembly attribute of the CSC
task to the name of the executable file that is
created -->
<Output TaskParameter="OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
次の例に TreatAsLocalProperty の属性を使用する方法を示します。Color のプロパティにプロジェクト ファイルで Blue と、コマンド ラインで Green の値があります。プロジェクトのタグの TreatAsLocalProperty="Color" によって、コマンド ライン プロパティ (Green) はプロジェクト ファイル (Blue) で定義されているプロパティをオーバーライドしません。
プロジェクトをビルドするには、次のコマンドを入力します:
msbuild colortest.proj /t:go /property:Color=Green
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">
<PropertyGroup>
<Color>Blue</Color>
</PropertyGroup>
<Target Name="go">
<Message Text="Color: $(Color)" />
</Target>
</Project>
<!--
Output with TreatAsLocalProperty="Color" in project tag:
Color: Blue
Output without TreatAsLocalProperty="Color" in project tag:
Color: Green
-->