Freigeben über


Ausschließen von Dateien aus dem Build

In einer Projektdatei können Sie Mithilfe von Wildcards alle Dateien in einem Verzeichnis oder einen geschachtelten Satz von Verzeichnissen als Eingaben für einen Build einschließen. Es kann jedoch eine Datei im Verzeichnis oder in einem verzeichnis in einem geschachtelten Satz von Verzeichnissen geben, die Sie nicht als Eingabe für einen Build einschließen möchten. Sie können diese Datei oder das Verzeichnis explizit aus der Liste der Eingaben ausschließen. Es kann auch eine Datei in einem Projekt geben, die Nur unter bestimmten Bedingungen eingeschlossen werden soll. Sie können explizit die Bedingungen deklarieren, unter denen eine Datei in einem Build enthalten ist.

Hinweis

Die in diesem Artikel beschriebenen Techniken gelten nicht für F# und C++. Diese Projektsysteme verwalten die Quelldateien selbst.

Ausschließen einer Datei mit Visual Studio

Wenn Sie Visual Studio verwenden, wählen Sie die Datei im Projektmappen-Explorer aus, öffnen Sie das Eigenschaftenfenster (drücken Sie Alt+Eingabetaste), und legen Sie die Buildaktion auf Keine fest.

Dies führt zu den folgenden Änderungen in der MSBuild-Projektdatei:

  <ItemGroup>
    <Compile Remove="ClassToExclude.cs" />
  </ItemGroup>

  <ItemGroup>
    <None Include="ClassToExclude.cs" />
  </ItemGroup>

Dies eignet sich gut für einige Dateien, skaliert aber nicht auf eine größere Anzahl von Dateien oder Dateien, die einem bestimmten Muster entsprechen. In .NET-Projekten können Sie MSBuild verwenden, um Dateien und Verzeichnisse mithilfe eines Wildcardausdrucks, auch als Glob bezeichnet, auszuschließen, wie weiter beschrieben.

Ausschließen von Dateien oder Verzeichnissen in .NET-Projekten

Elementlisten sind die Eingabedateien für einen Build. Für die meisten Projekte, z. B. .NET SDK-Projekte, gibt es vordefinierte Elementlisten verschiedener Elementtypen (z Compile . B. für Quelldateien, Content für bestimmte statische Dateien usw.), die bereits durch die Standardimporte definiert sind. Eine Liste dieser Elemente finden Sie unter "Common MSBuild"-Projektelemente. In Ihrem Projektcode sind diese vordefiniert, um alle relevanten Elemente einzuschließen. Beispiel: Compile In einem C#-Projekt sind alle Dateien mit der .cs Erweiterung enthalten.

Um Dateien auszuschließen, können Sie das Remove Attribut für das Element verwenden.

<ItemGroup>
   <Compile Remove="ClassToExclude.cs" />
</ItemGroup>

Sie können mehrere einzelne Dateien 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.

Einschließen und Ausschließen von Dateien oder Verzeichnissen in der MSBuild-Sprache

In der unformatierten MSBuild-Sprache (d. h. ohne Standardimporte oder Verweis auf ein SDK) werden die Elemente, die Sie einschließen möchten, entweder separat oder als Gruppe mit dem Include Attribut deklariert. Beispiel:

<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>

Wenn Sie Wildcards verwenden, um alle Dateien in einem Verzeichnis oder einen geschachtelten Satz von Verzeichnissen als Eingaben für einen Build einzuschließen, gibt es möglicherweise eine oder mehrere Dateien im Verzeichnis oder in einem Verzeichnis in der geschachtelten Gruppe von Verzeichnissen, die Sie nicht einschließen möchten. Verwenden Sie das Exclude Attribut, um ein Element aus der Elementliste auszuschließen.

Exclude ist eigentlich kein Elementvorgang; sie kann nicht allein verwendet werden, sondern nur als Modifizierer für Include.

Alle .cs- oder .vb-Dateien außer Form2 einfügen.

  • Verwenden Sie eines der folgenden Include und Exclude Attribute:

    <CSFile Include="*.cs" Exclude="Form2.cs"/>
    

    oder

    <VBFile Include="*.vb" Exclude="Form2.vb"/>
    

Um alle .cs-Dateien außer .vb und Form2 einzubeziehen

  • Verwenden Sie eines der folgenden Include und Exclude Attribute:

    <CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
    

    oder

    <VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
    

So fügen Sie alle .jpg Dateien in Unterverzeichnisse des Images Verzeichnisses mit Ausnahme der Dateien im Version2 Verzeichnis ein

  • Verwenden Sie die folgenden Include und Exclude Attribute:

    <JPGFile
        Include="Images\**\*.jpg"
        Exclude = "Images\**\Version2\*.jpg"/>
    

    Hinweis

    Sie müssen den Pfad für beide Attribute angeben. Wenn Sie einen absoluten Pfad verwenden, um Dateispeicherorte im Include Attribut anzugeben, müssen Sie auch einen absoluten Pfad im Exclude Attribut verwenden. Wenn Sie einen relativen Pfad im Include Attribut verwenden, müssen Sie auch einen relativen Pfad im Exclude Attribut verwenden.

Ausschließen und Entfernen

Wenn Sie Ihre eigenen Elementlisten definieren, sollten Sie nach Möglichkeit verwenden Exclude . Es gibt einen Leistungsvorteil bei der Verwendung Exclude in derselben Deklaration wie Include, da die ausgeschlossenen Elemente nicht verarbeitet werden müssen.

Verwenden Sie Remove, wenn Sie über eine vordefinierte Artikelliste verfügen, wie im Fall der Standardlisten wie Compile und Content. In diesem Fall wird Exclude nicht unterstützt.

Hinweis

Wenn Sie ein SDK verwenden, das es unterstützt, können Sie die $(OverrideDefaultCompileItems) Eigenschaft auf truefestlegen und Ihr eigenes Compile Element mit Include und optional Excludedefinieren.

Verwenden von Bedingungen zum Ausschließen einer Datei oder eines Verzeichnisses aus den Eingaben für einen Build

Wenn Elemente vorhanden sind, die Sie einschließen möchten, z. B. in einem Debugbuild, aber nicht in einem Release-Build, können Sie das Condition Attribut verwenden, um die Bedingungen anzugeben, unter denen das Element eingeschlossen werden soll.

Fügen Sie die Datei Formula.vb nur in Release-Builds ein

  • Verwenden Sie ein Condition Attribut ähnlich dem folgenden:

    <Compile
        Include="Formula.vb"
        Condition=" '$(Configuration)' == 'Release' " />
    

Beispiel

Im folgenden Codebeispiel wird ein Projekt mit allen .cs Dateien im Verzeichnis erstellt, mit Ausnahme von 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>