方法: ビルドからファイルを除外する
プロジェクト ファイルでは、ワイルドカードを使用して、1 つのディレクトリ内 (またはネストされた一連のディレクトリ内) のすべてのファイルをビルドの入力としてインクルードできます。ただし、そのディレクトリ内の特定の 1 ファイルや、ネストされた一連のディレクトリ内の特定の 1 ディレクトリを、ビルドから除外したい場合もあります。このようなファイルまたはディレクトリを入力対象から明示的に除外できます。また、プロジェクト内のファイルを、特定の条件が満たされた場合にのみインクルードしたい場合もあるでしょう。特定のファイルをビルドにインクルードするための条件を明示的に宣言することもできます。
ファイルまたはディレクトリをビルドへの入力対象から除外する
項目のリストは、ビルドの入力ファイルです。インクルードする項目は個別に宣言するか、Include 属性を使用してまとめて宣言できます。次に例を示します。
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
ワイルドカードを使用して特定のディレクトリ内のすべてのファイル、またはネストされた一連のディレクトリ内のすべてのファイルをビルドの入力としてインクルードするときに、除外したいファイルが 1 つ以上あるとします。項目のリストから 1 つの項目を除外するには、Exclude 属性を使用します。
Form2 を除くすべての .cs ファイルまたは .vb ファイルをインクルードするには
次のように、Include 属性および Exclude 属性を使用します。
<CSFile Include="*.cs" Exclude="Form2.cs"/>
または
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Form2 および Form3 を除くすべての .cs ファイルまたは .vb ファイルをインクルードするには
次のように、Include 属性および Exclude 属性を使用します。
<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
または
<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="https://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>