方法 : ワイルドカードを使用してディレクトリ内のすべてのファイルをビルドする

更新 : 2007 年 11 月

複数のファイルから成るプロジェクトをビルドするとき、プロジェクト ファイルで個々のファイルを指定する以外に、ワイルドカードを使用して 1 つのディレクトリまたは入れ子になった複数のディレクトリのファイルをすべてインクルードできます。

入力の指定

ビルドの入力ファイルは項目によって表されます。項目の詳細については、「MSBuild 項目」を参照してください。

ビルド対象のファイルをインクルードするには、MSBuild のプロジェクト ファイルで、これらのファイルを項目のコレクションに追加する必要があります。複数のファイルを項目のコレクションに追加するには、ファイルを個別にインクルードするか、ワイルドカードを使用して複数のファイルを一度にインクルードします。

項目を個別に宣言するには

  • Include 属性を次のように使用します。

    <CSFile Include="form1.cs"/>
    

    または

    <VBFile Include="form1.vb"/>
    
    ms171454.alert_note(ja-jp,VS.90).gifメモ :

    項目のコレクション内の項目がプロジェクト ファイルと異なるディレクトリに存在する場合は、その項目への完全パスまたは相対パスを指定する必要があります。たとえば、Include="..\..\form2.cs" となります。

複数の項目を宣言するには

  • Include 属性を次のように使用します。

    <CSFile Include="form1.cs;form2.cs"/>
    

    または

    <VBFile Include="form1.vb;form2.vb"/>
    

入力ファイルをワイルドカードで指定する

ワイルドカードを使用して、サブディレクトリからビルドの入力対象となるすべてのファイルまたは特定のファイルのみを再帰的にインクルードすることもできます。ここでは、プロジェクト ファイルが Project ディレクトリに置かれているプロジェクトを例にとってみます。グラフィックス ファイルが次のディレクトリおよびサブディレクトリに置かれています。

Project\Images\BestJpgs

Project\Images\ImgJpgs

Project\Images\ImgJpgs\Img1

Images ディレクトリとサブディレクトリに存在するすべての .jpg ファイルをインクルードするには

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

    Include="Images\\**\*.jpg"
    

"img" で始まるすべての .jpg ファイルをインクルードするには

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

    Include="Images\**\img*.jpg"
    

"jpgs" で終わるディレクトリ内のすべてのファイルをインクルードするには

  • 次のいずれかの Include 属性を使用します。

    Include="Images\**\*jpgs\*.*"
    

    または

    Include="Images\**\*jpgs\*"
    

項目をタスクに渡す

プロジェクト ファイルでは、タスクに @() 表記を使用することにより、ビルドの入力対象として項目のコレクション全体を指定できます。この表記は、すべてのファイルを個別に指定した場合でも、ワイルドカードを使った場合でも使用できます。

すべての Visual C# ファイルまたはすべての Visual Basic ファイルを入力として使用するには

  • Include 属性を次のように使用します。

    <CSC Sources="@(CSFile)">...</CSC>
    

    または

    <VBC Sources="@(VBFile)">...</VBC>
    
ms171454.alert_note(ja-jp,VS.90).gifメモ :

ビルドの入力ファイルを複数指定する場合、ワイルドカードは項目に対して使用する必要があります。CscVbc など、MSBuild タスクの Sources 属性を使用して入力ファイルを指定することはできません。プロジェクト ファイルでは、次の例のような使い方はできません。

<CSC Sources="*.cs">...</CSC>

使用例

すべての入力ファイルを個別にインクルードするプロジェクトを次のコード例に示します。

<Project DefaultTargets="Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
    <PropertyGroup>
        <Builtdir>built</Builtdir>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="Form1.cs"/>
        <CSFile Include="AssemblyInfo.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>

ワイルドカードを使用してすべての .cs ファイルをインクルードするコード例を次に示します。

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

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

    <ItemGroup>
        <CSFile Include="*.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>

参照

処理手順

方法 : ディレクトリ内の特定の 1 ファイルを除くすべてのファイルをビルドする

概念

MSBuild 項目