ビルドからファイルを除外する

プロジェクト ファイルでは、ワイルドカードを使用して、1 つのディレクトリ内のすべてのファイル、または入れ子にされたディレクトリのセットをビルドの入力として使用することができます。 しかし、ディレクトリ内の 1 つのファイル、または入れ子にされたディレクトリのセット内の 1 つのディレクトリをビルドの入力に含めたくない場合もあります。 そのファイルまたはディレクトリは、入力の一覧から明示的に除外できます。 また、特定の条件のもとでのみ含めることを望むファイルがプロジェクトに存在することもあります。 ファイルをビルドに含める条件を明示的に宣言できます。

ビルドの入力からファイルまたはディレクトリを除外する

項目リストは、ビルドの入力ファイルです。 Include 属性を使用して、含める項目を個別にまたはグループとして宣言します。 次に例を示します。

<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>

ビルドの入力として 1 つのディレクトリのすべてのファイルまたは入れ子にされたディレクトリのセットを含めるためにワイルドカードを使用した場合に、ディレクトリ内の 1 つ以上のファイル、または入れ子にされたディレクトリのセット内の 1 つのディレクトリを含めたくないと思う可能性があります。 項目リストから項目を除外するには、Exclude 属性を使用します。

Form2 を除くすべての .cs ファイルまたは .vb ファイルを含める場合

  • 次の Include および Exclude 属性のうち、いずれかを使用します。

    <CSFile Include="*.cs" Exclude="Form2.cs"/>
    

    or

    <VBFile Include="*.vb" Exclude="Form2.vb"/>
    

Form2Form3 を除くすべての .cs ファイルまたは .vb ファイルを含める場合

  • 次の Include および Exclude 属性のうち、いずれかを使用します。

    <CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
    

    or

    <VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
    

Images ディレクトリのサブディレクトリにあるすべての .jpg ファイルを含めるものの、Version2 ディレクトリのファイルは除外する場合

  • 次の Include 属性と Exclude 属性を使用します。

    <JPGFile
        Include="Images\**\*.jpg"
        Exclude = "Images\**\Version2\*.jpg"/>
    

    注意

    両方の属性にパスを指定する必要があります。 ファイルの場所を指定するのに Include 属性で絶対パスを使用する場合、Exclude 属性においても絶対パスを使用する必要があります。Include 属性で相対パスを使用する場合は、Exclude 属性においても相対パスを使用する必要があります。

条件を使ってビルドの入力からファイルまたはディレクトリを除外する

たとえば、デバッグ ビルドには含めるものの、リリース ビルドには含めない項目がある場合には、Condition 属性を使用して項目を含める条件を指定できます。

リリース ビルドにのみファイル Formula.vb を含める場合

  • 以下のような Condition 属性を使用します。

    <Compile
        Include="Formula.vb"
        Condition=" '$(Configuration)' == 'Release' " />
    

次のコードの例では、Form2.cs を除くディレクトリ内のすべての .cs ファイルを使用してプロジェクトをビルドします。

<Project DefaultTargets="Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

    <PropertyGroup>
        <builtdir>built</builtdir>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="*.cs" Exclude="Form2.cs"/>

        <Reference Include="System.dll"/>
        <Reference Include="System.Data.dll"/>
        <Reference Include="System.Drawing.dll"/>
        <Reference Include="System.Windows.Forms.dll"/>
        <Reference Include="System.XML.dll"/>
    </ItemGroup>

    <Target Name="PreBuild">
        <Exec Command="if not exist $(builtdir) md $(builtdir)"/>
    </Target>

    <Target Name="Compile" DependsOnTargets="PreBuild">
        <Csc Sources="@(CSFile)"
            References="@(Reference)"
            OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
            TargetType="exe" />
    </Target>
</Project>