Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In un file di progetto è possibile usare caratteri jolly per includere tutti i file in una directory o in un set annidato di directory come input per una compilazione. Tuttavia, potrebbe essere presente un file nella directory o una directory in un set annidato di directory che non si vuole includere come input per una compilazione. È possibile escludere in modo esplicito tale file o directory dall'elenco di input. Potrebbe anche essere presente un file in un progetto che si vuole includere solo in determinate condizioni. È possibile dichiarare in modo esplicito le condizioni in cui un file è incluso in una compilazione.
Annotazioni
Le tecniche descritte in questo articolo non sono applicabili a F# e C++. Questi sistemi di progetto gestiscono i file di origine stessi.
Escludere un file con Visual Studio
Se si usa Visual Studio, selezionare il file in Esplora soluzioni, visualizzare la finestra Proprietà (premere ALT+INVIO) e impostare Azione dicompilazione su Nessuno.
Ciò comporta le modifiche seguenti nel file di progetto MSBuild:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
Questo funziona bene per alcuni file, ma non aumenta fino a un numero maggiore di file o file che corrispondono a un determinato modello. Nei progetti .NET è possibile usare MSBuild per escludere file e directory usando un'espressione con caratteri jolly, chiamata anche glob, come descritto di seguito.
Escludere file o directory nei progetti di .NET
Gli elenchi di elementi sono i file di input per una compilazione. Per la maggior parte dei progetti, ad esempio i progetti .NET SDK, sono disponibili elenchi di elementi predefiniti di diversi tipi di elementi (ad esempio, Compile per i file di origine, Content per determinati file statici e così via) già definiti dalle importazioni standard. Un elenco di questi elementi è disponibile in Elementi comuni del progetto MSBuild. Nel codice del progetto, questi sono predefiniti per includere tutti gli elementi rilevanti; Ad esempio, Compile in un progetto C# include tutti i file con l'estensione .cs .
Per escludere i file, è possibile usare l'attributo Remove sull'elemento.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
È possibile specificare più file singoli o vari modelli GLOB:
<ItemGroup>
<Compile Remove="Contoso*.cs" /> <!-- Wildcard on filename -->
<Compile Remove="File1.cs;File2.cs" /> <!-- List of files with separator -->
<Compile Remove="Contoso/**/*.cs" /> <!-- All .cs files in a directory subtree -->
</ItemGroup>
Per un elenco dei modelli supportati, vedere Formati dei modelli.
Includere ed escludere file o directory nel linguaggio MSBuild
Nel linguaggio MSBuild non elaborato, ovvero senza alcuna importazione standard o riferimento a un SDK, gli elementi da includere vengono dichiarati separatamente o come gruppo usando l'attributo Include . Per esempio:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Se si utilizzano caratteri jolly per includere tutti i file in una directory o in un insieme di directory annidate come input per una compilazione, potrebbe esserci uno o più file nella directory o una directory nell'insieme annidato di directory che non si desidera includere. Per escludere un elemento dall'elenco di elementi, usare l'attributo Exclude .
Exclude non è in realtà un'operazione di elemento; non può essere usato da solo, ma solo come modificatore per Include.
Per includere tutti i .cs file o .vb ad eccezione di Form2
Usare uno dei seguenti attributi
IncludeeExclude:<CSFile Include="*.cs" Exclude="Form2.cs"/>o
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Per includere tutti i .cs file o .vb tranne Form2 e Form3
Usare uno dei seguenti attributi
IncludeeExclude:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>o
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Per includere tutti i .jpg file nelle sottodirectory della Images directory, ad eccezione di quelli nella Version2 directory
Utilizzare i seguenti attributi
IncludeeExclude:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>Annotazioni
È necessario specificare il percorso per entrambi gli attributi. Se si usa un percorso assoluto per specificare i percorsi dei file nell'attributo
Include, è necessario usare anche un percorso assoluto nell'attributoExclude. Se si usa un percorso relativo nell'attributoInclude, è necessario usare anche un percorso relativo nell'attributoExclude.
Escludere e rimuovere
Se si definiscono elenchi di elementi personalizzati, è consigliabile usarli Exclude quando possibile. Esiste un vantaggio per le prestazioni dell'uso Exclude nella stessa dichiarazione di Include, perché gli elementi che verrebbero esclusi non devono essere elaborati.
Usare Remove quando si dispone di un elenco di elementi predefinito, ad esempio nel caso degli elenchi di elementi standard come Compile e Content. In tal caso, Exclude non è supportato.
Annotazioni
Se si usa un SDK che lo supporta, è possibile impostare la $(OverrideDefaultCompileItems) proprietà su truee definire il proprio Compile elemento con Include e, facoltativamente, Exclude.
Usare le condizioni per escludere un file o una directory dagli input per una compilazione
Se sono presenti elementi da includere, ad esempio, in una compilazione di debug ma non in una build release, è possibile usare l'attributo Condition per specificare le condizioni in cui includere l'elemento.
Per includere il file Formula.vb solo nelle build di rilascio
Usare un
Conditionattributo simile al seguente:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Esempio
Nell'esempio di codice seguente viene compilato un progetto con tutti i file .cs nella directory, ad eccezione di Form2.cs.
<Project DefaultTargets="Compile">
<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>