Procedura: utilizzare caratteri jolly per compilare tutti i file di una directory

Aggiornamento: novembre 2007

Quando si genera un progetto che contiene numerosi file, è possibile elencarli separatamente nel file di progetto oppure utilizzare caratteri jolly per includerli tutti in una directory o in un insieme nidificato di directory.

Definizione degli input

Gli elementi rappresentano gli input per una generazione. Per ulteriori informazioni sugli elementi, vedere Elementi MSBuild.

Per includere i file per una compilazione, è necessario inserirli in un insieme di elementi nel file di progetto di MSBuild. Se si desidera aggiungere più file agli insiemi di elementi, tali file possono essere inclusi singolarmente oppure tutti insieme utilizzando i caratteri jolly.

Per dichiarare gli elementi individualmente

  • Utilizzare attributi Include simili a quelli riportati di seguito:

    <CSFile Include="form1.cs"/>
    

    -oppure-

    <VBFile Include="form1.vb"/>
    
    Nota:

    Se gli elementi di un insieme non si trovano nella stessa directory del file di progetto, è necessario specificare il percorso completo o relativo dell'elemento, Ad esempio: Include="..\..\form2.cs".

Per dichiarare più elementi

  • Utilizzare attributi Include simili a quelli riportati di seguito:

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

    – oppure –

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

Specifica degli input tramite caratteri jolly

I caratteri jolly possono inoltre essere utilizzati per includere in modo ricorsivo come input per una generazione tutti i file, o solo alcuni di essi, presenti nelle sottodirectory. Negli esempi riportati di seguito è illustrato un progetto che contiene file grafici nelle directory e sottodirectory indicate, con il file di progetto situato nella directory Project:

Project\Images\BestJpgs

Project\Images\ImgJpgs

Project\Images\ImgJpgs\Img1

Per includere tutti i file con estensione jpg presenti nella directory Images e nelle relative sottodirectory

  • Utilizzare il seguente attributo Include:

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

Per includere tutti i file con estensione jpg il cui nome inizia con "img"

  • Utilizzare il seguente attributo Include:

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

Per includere tutti i file presenti nelle directory il cui nome termina in "jpgs"

  • Utilizzare uno degli attributi Include seguenti:

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

    -oppure-

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

Passaggio degli elementi a un'attività

In un file di progetto è possibile inserire la notazione @() nelle attività per specificare come input per una generazione un intero insieme di elementi. Tale notazione può essere utilizzata sia che i file vengano elencati separatamente, sia che si utilizzino i caratteri jolly.

Per utilizzare come input tutti i file Visual C# o Visual Basic

  • Utilizzare attributi Include simili a quelli riportati di seguito:

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

    -oppure-

    <VBC Sources="@(VBFile)">...</VBC>
    
Nota:

Per specificare gli input per una compilazione, è necessario utilizzare caratteri jolly con gli elementi. Non è consentito ricorrere all'attributo Sources in attività di MSBuild quali Csc o Vbc. L'esempio riportato di seguito non è considerato valido in un file di progetto:

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

Esempio

Nell'esempio di codice riportato di seguito viene illustrato un progetto in cui tutti i file di input vengono inclusi separatamente.

<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>

Nell'esempio di codice riportato di seguito viene utilizzato un carattere jolly per includere tutti i file con estensione 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>

Vedere anche

Attività

Procedura: compilare tutti i file di una directory tranne uno

Concetti

Elementi MSBuild