方法 : 同じソース ファイルを異なるオプションでビルドする

更新 : 2007 年 11 月

プロジェクトをビルドするとき、同じコンポーネントを異なるビルド オプションでコンパイルしなければならない場合があります。たとえば、デバッグ ビルドについてはシンボル情報を含めて作成し、リリース ビルドについては、最適化を有効にしてシンボル情報を含めずに作成するといったことができます。また、x86 や x64 など、特定の実行プラットフォームを想定してプロジェクトをビルドすることもできます。どのような場合でも、ビルド構成を制御するために変更する必要があるのは一部のオプションだけで、ほとんどのビルド オプションは同じ設定がそのまま使用されます。MSBuild では、プロパティや条件を使用して異なるビルド構成を作成できます。

プロパティによるプロジェクトの変更

Property 要素は、一時ディレクトリの場所など、プロジェクト ファイル内で頻繁に参照される変数を定義したり、デバッグ ビルドやリリース ビルドなど、複数の構成で使用されるプロパティの値を設定したりするときに使用します。プロパティの詳細については、「MSBuild プロパティ」を参照してください。

プロパティを使用すると、プロジェクト ファイルに変更を加えることなくビルドの構成を変更できます。プロパティの値は、Property 要素および PropertyGroup 要素の Condition 属性を使用して変更できます。MSBuild の条件の詳細については、「MSBuild の条件」を参照してください。

他のプロパティに基づいてプロパティ グループを設定するには

  • 次のように PropertyGroup 要素の Condtion 属性を使用します。

    <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 によって自動的に取り込まれます。環境変数の使用方法の詳細については、「方法 : ビルドで環境変数を使用する」を参照してください。

ms171481.alert_note(ja-jp,VS.90).gifメモ :

コマンド ラインに指定されるプロパティ値は、プロジェクト ファイルで同じプロパティに対して設定された値よりも常に優先されます。また、プロジェクト ファイル内の値は、環境変数の値よりも優先されます。

使用例

次のコード例 ("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>

参照

概念

MSBuild

その他の技術情報

MSBuild の概念

MSBuild リファレンス