方法 : 同じソース ファイルを異なるオプションでビルドするHow to: Build the Same Source Files with Different Options

プロジェクトをビルドする場合、同じコンポーネントを異なるビルド オプションでコンパイルすることがよくあります。When you build projects, you frequently compile the same components with different build options. たとえば、シンボル情報を付ければデバッグ ビルドを作成でき、シンボル情報なしで最適化を有効にすればリリース ビルドを作成できます。For example, you can create a debug build with symbol information or a release build with no symbol information but with optimizations enabled. あるいは、x86 や x64x64 などのように、特定のプラットフォーム上で実行するようにプロジェクトをビルドできます。Or you can build a project to run on a specific platform, such as x86 or x64x64. これらのいずれの場合も、ほとんどのビルド オプションは同じままで、ビルド構成を制御するためにいくつかのオプションが変更されるだけです。In all these cases, most of the build options stay the same; only a few options are changed to control the build configuration. MSBuildMSBuild では、異なるビルド構成を作成するためにプロパティと条件を使用します。With MSBuildMSBuild, you use properties and conditions to create the different build configurations.

プロパティを使用してプロジェクトを変更Using Properties to Modify Projects

Property 要素は、一時ディレクトリの場所など、1 つのプロジェクト ファイル内で何回も参照されるような変数を定義したり、デバッグ ビルドとリリース ビルドなど、複数の構成で使用されるプロパティに値を設定したりします。The Property element defines a variable that is referenced several times in a project file, such as the location of a temporary directory, or to set the values for properties that are used in several configurations, such as a Debug build and a Release build. プロパティの詳細については、「MSBuild プロパティ」を参照してください。For more information about properties, see MSBuild Properties.

プロパティは、プロジェクト ファイルを変更せずにビルドの構成を変更するために使用することができます。You can use properties to change the configuration of your build without having to change the project file. Property 要素と PropertyGroup 要素の Condition 属性により、プロパティの値を変更することができます。The Condition attribute of the Property element and the PropertyGroup element allows you to change the value of properties. MSBuildMSBuild 条件の詳細については、「条件」を参照してください。For more information about MSBuildMSBuild conditions, see Conditions.

プロパティのグループを別のプロパティに基づいて設定するにはTo set a group of properties based on another property

  • PropertyGroup 要素で以下のような Condition 属性を使用します。Use a Condition attribute in a PropertyGroup element similar to the following:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">  
        <DebugType>full</DebugType>  
        <Optimize>no</Optimize>  
    </PropertyGroup>  
    

プロパティを別のプロパティに基づいて定義するにはTo define a property based on another property

  • Property 要素で以下のような Condition 属性を使用します。Use a Condition attribute in a Property element similar to the following:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>  
    

コマンド ラインでのプロパティの指定Specifying Properties on the Command Line

複数の構成を受け入れるようにプロジェクト ファイルを作成したら、プロジェクトをビルドするときに構成を変更できなければなりません。Once your project file is written to accept multiple configurations, you need to have the ability to change those configurations whenever you build your project. それができるよう、MSBuildMSBuild ではコマンド ラインで /property または /p スイッチを使用してプロパティを指定できるようになっています。MSBuildMSBuild provides this ability by allowing properties to be specified on the command line using the /property or /p switch.

コマンド ライン上でプロジェクト プロパティを設定するにはTo set a project property at the command line

  • /property スイッチをプロパティおよびプロパティ値と共に使用します。Use the /property switch with the property and property value. 例:For example:

    msbuild file.proj /property:Flavor=Debug  
    
    • またはor -
    Msbuild file.proj /p:Flavor=Debug  
    

コマンド ライン上で 2 つ以上のプロジェクト プロパティを指定するにはTo specify more than one project property at the command line

  • /property または /p スイッチをプロパティおよびプロパティ値と共に複数回使用するか、/property または /p スイッチを 1 回使用し、複数のプロパティをセミコロン (;) で分けます。Use the /property or /p switch multiple times with the property and property values, or use one /property or /p switch and separate multiple properties with semicolons (;). 例:For example:

    msbuild file.proj /p:Flavor=Debug;Platform=x86  
    
    • またはor-
    msbuild file.proj /p:Flavor=Debug /p:Platform=x86  
    

    環境変数はプロパティとしても扱われ、MSBuildMSBuild によって自動的に組み込まれます。Environment variables are also treated as properties and are automatically incorporated by MSBuildMSBuild. 環境変数の使用に関する詳細については、「方法: ビルドで環境変数を使用する」を参照してください。For more information about using environment variables, see How to: Use Environment Variables in a Build.

    コマンド ラインで指定されたプロパティ値は、同じプロパティに対してプロジェクト ファイル内で設定されているどの値よりも優先され、プロジェクト ファイル内の値は環境変数の値よりも優先されます。The property value that is specified on the command line takes precedence over any value that is set for the same property in the project file, and that value in the project file takes precedence over the value in an environment variable.

    この動作は、プロジェクト タグの TreatAsLocalProperty 属性を使用して変更できます。You can change this behavior by using the TreatAsLocalProperty attribute in a project tag. その属性と共に記載されたプロパティ名については、コマンド ラインで指定されたプロパティ値がプロジェクト ファイル内の値よりも優先されることはありません。For property names that are listed with that attribute, the property value that's specified on the command line doesn't take precedence over the value in the project file. このトピックの後の部分でその例を示します。You can find an example later in this topic.

Example

以下の "Hello World" プロジェクトのコード例には、デバッグ ビルドとリリース ビルドを作成するために使用できる 2 つの新しいプロパティ グループが含まれています。The following code example, the "Hello World" project, contains two new property groups that can be used to create a Debug build and a Release build.

このプロジェクトのデバッグ バージョンをビルドするには、以下のように入力します。To build the debug version of this project, type:

msbuild consolehwcs1.proj /p:flavor=debug  

このプロジェクトのリテール バージョンをビルドするには、以下のように入力します。To build the retail version of this project, type:

msbuild consolehwcs1.proj /p:flavor=retail  
<Project DefaultTargets = "Compile"  
    xmlns="http://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>  

Example

次の例は、TreatAsLocalProperty 属性を使用する方法を示しています。The following example illustrates how to use the TreatAsLocalProperty attribute. Color プロパティはプロジェクト ファイル内では値 Blue であり、コマンド ライン上では値 Green です。The Color property has a value of Blue in the project file and Green in the command line. プロジェクト タグ内に TreatAsLocalProperty="Color" がある場合、コマンド ライン上のプロパティ (Green) はプロジェクト ファイル内で定義されているプロパティ (Blue) を上書きしません。With TreatAsLocalProperty="Color" in the project tag, the command-line property (Green) doesn't override the property that's defined in the project file (Blue).

プロジェクトをビルドするには、次のコマンドを入力します。To build the project, enter the following command:

msbuild colortest.proj /t:go /property:Color=Green  
<Project xmlns="http://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  
-->  

参照See Also

MSBuildMSBuild
MSBuild の概念 MSBuild Concepts
MSBuild リファレンス MSBuild Reference
Project 要素 (MSBuild)Project Element (MSBuild)