Ausschließen von Dateien aus dem Buildvorgang
Sie können in einer Projektdatei Platzhalter verwenden, um alle Dateien in einem Verzeichnis oder einer geschachtelten Gruppe von Verzeichnissen als Eingaben für einen Buildvorgang einzuschließen. Möglicherweise gibt es jedoch eine Datei im Verzeichnis oder ein Verzeichnis in einer geschachtelten Gruppe von Verzeichnissen, die nicht als Eingabe für einen Buildvorgang eingeschlossen werden sollen. Sie können diese Datei oder dieses Verzeichnis explizit aus der Liste der Eingaben ausschließen. Vielleicht gibt es auch eine Datei in einem Projekt, das Sie nur unter bestimmten Umständen miteinbeziehen wollen. Sie können die Bedingungen explizit deklarieren, unter denen eine Datei in einem Buildvorgang enthalten ist.
Hinweis
Die in diesem Artikel beschriebenen Verfahren gelten nicht für F# und C++. Diese Projektsysteme verwalten die Quelldateien selbst.
Ausschließen einer Datei mit Visual Studio
Wählen Sie bei Nutzung von Visual Studio die Datei im Projektmappen-Explorer aus, zeigen Sie das Fenster Eigenschaften an (drücken Sie ALT+EINGABETASTE), und stellen Sie die Buildaktion auf Keine ein.
Das führt in der Projektdatei von MSBuild zu den folgenden Änderungen:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
Dies funktioniert gut für einige wenige Dateien, lässt sich aber nicht auf eine größere Anzahl von Dateien hochskalieren oder für Dateien anwenden, die einem bestimmten Muster entsprechen. In .NET-Projekten können Sie mithilfe von MSBuild Dateien und Verzeichnisse mit einem Platzhalterausdruck (auch als Glob bezeichnet) ausschließen, wie im nächsten Schritt beschrieben.
Ausschließen von Dateien oder Verzeichnissen in .NET-Projekten
Elementlisten sind die Eingabedateien für einen Buildvorgang. Für die meisten Projekte, wie etwa .NET SDK-Projekte, gibt es vordefinierte Elementlisten verschiedener Elementtypen (z. B. Compile
für Quelldateien, Content
für bestimmte statische Dateien usw.), die bereits durch die Standardimporte definiert sind. Eine Liste dieser Elemente finden Sie unter Gemeinsame MSBuild-Projektelemente. Im Projektcode sind diese vordefiniert, um alle relevanten Elemente einzubeziehen. Compile
in einem C#-Projekt zum Beispiel enthält alle Dateien mit der Erweiterung .cs
.
Mit dem Attribut Remove
für das jeweilige Element können Sie Dateien ausschließen.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
Sie können mehrere Einzeldateien oder verschiedene Globmuster angeben:
<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>
Eine Liste der unterstützten Muster finden Sie unter Musterformate.
Ein- und Ausschließen von Dateien oder Verzeichnissen in der Sprache MSBuild
In der unformatierten MSBuild-Sprache (d. h. ohne Standardimporte oder Verweis auf ein SDK) werden die einzubeziehenden Elemente entweder separat oder als Gruppe mit dem Attribut Include
deklariert. Zum Beispiel:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Wenn Sie Platzhalter verwenden, um alle Dateien in einem Verzeichnis oder einer geschachtelten Gruppe von Verzeichnissen als Eingaben für einen Buildvorgang einzuschließen, gibt es möglicherweise eine oder mehrere Dateien im Verzeichnis oder ein Verzeichnis in einer geschachtelten Gruppe von Verzeichnissen, die Sie nicht einschließen möchten. So verwenden Sie das Attribut Exclude
zum Ausschließen eines Elements aus der Elementliste.
Exclude
ist eigentlich kein Elementvorgang; das Attribut kann nicht allein verwendet werden, sondern nur als Modifizierer für Include
.
So schließen Sie alle .cs
- oder *.vb
-Dateien außer Form2
ein
Ändern Sie eines der folgenden Attribute
Include
undExclude
:<CSFile Include="*.cs" Exclude="Form2.cs"/>
oder
<VBFile Include="*.vb" Exclude="Form2.vb"/>
So schließen Sie alle .cs
- oder .vb
-Dateien außer Form2
und Form3
ein
Ändern Sie eines der folgenden Attribute
Include
undExclude
:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
oder
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
So schließen Sie alle .jpg
-Dateien in Unterverzeichnisse des Verzeichnisses Images
ein, außer den Dateien im Verzeichnis Version2
Verwenden Sie die folgenden Attribute
Include
undExclude
:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
Hinweis
Sie müssen den Pfad für beide Attribute angeben. Wenn Sie einen absoluten Pfad zum Angeben von Dateispeicherorten im Attribut
Include
verwenden, müssen Sie auch einen absoluten Pfad im AttributExclude
verwenden. Verwenden Sie einen relativen Pfad im AttributInclude
, müssen Sie auch einen relativen Pfad im AttributExclude
verwenden.
Ausschließen und Entfernen
Beim Definieren eigener Elementlisten sollten Sie nach Möglichkeit Exclude
verwenden. Die Nutzung von Exclude
in derselben Deklaration wie Include
bietet einen Leistungsvorteil, da die ausgeschlossenen Elemente nicht verarbeitet werden müssen.
Verwenden Sie Remove
, wenn eine vordefinierte Elementliste vorliegt, zum Beispiel bei den Standardelementlisten wie Compile
und Content
. In diesem Fall wird Exclude
nicht unterstützt.
Hinweis
Wenn Sie ein SDK verwenden, das das Attribut unterstützt, können Sie die Eigenschaft $(OverrideDefaultCompileItems)
auf true
einstellen und Ihr eigenes Compile
-Element mit Include
und optional mit Exclude
definieren.
Verwenden von Bedingungen zum Ausschließen einer Datei oder eines Verzeichnisses aus den Eingaben für einen Buildvorgang
Wenn es Elemente gibt, die Sie einschließen möchten, z.B. in einem Debugebuild, aber nicht in einem Releasebuild, können Sie das Element Condition
verwenden, um die Bedingungen anzugeben, unter denen Sie das Element einschließen möchten.
So schließen Sie die Formula.vb-Datei nur in Releasebuilds ein
Verwenden Sie Attribut
Condition
, das ähnlich des Folgenden ist:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Beispiel
Das folgende Codebeispiel erstellt ein Projekt mit allen CS-Dateien im Verzeichnis, außer Form2.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>