Wykluczanie plików z kompilacji
W pliku projektu można użyć symboli wieloznacznych, aby uwzględnić wszystkie pliki w jednym katalogu lub zagnieżdżony zestaw katalogów jako dane wejściowe dla kompilacji. Może jednak istnieć jeden plik w katalogu lub jeden katalog w zagnieżdżonym zestawie katalogów, które nie mają być uwzględniane jako dane wejściowe dla kompilacji. Możesz jawnie wykluczyć ten plik lub katalog z listy danych wejściowych. W projekcie może być również plik, który ma zostać uwzględniny tylko w określonych warunkach. Możesz jawnie zadeklarować warunki, w których plik jest uwzględniony w kompilacji.
Uwaga
Techniki opisane w tym artykule nie mają zastosowania do języków F# i C++. Te systemy projektów zarządzają samymi plikami źródłowymi.
Wykluczanie pliku przy użyciu programu Visual Studio
Jeśli używasz programu Visual Studio, wybierz plik w Eksplorator rozwiązań, wyświetl okno Właściwości (naciśnij klawisz Alt+Enter) i ustaw akcję kompilacji na Brak.
Spowoduje to następujące zmiany w pliku projektu MSBuild:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
Działa to dobrze w przypadku kilku plików, ale nie jest skalowane w górę do większej liczby plików ani plików, które pasują do określonego wzorca. W projektach platformy .NET można używać programu MSBuild do wykluczania plików i katalogów przy użyciu wyrażenia wieloznakowego, nazywanego również symbolem wieloznacznymi, zgodnie z opisem w dalszej części.
Wykluczanie plików lub katalogów w projektach platformy .NET
Listy elementów to pliki wejściowe kompilacji. W przypadku większości projektów, takich jak projekty zestawu .NET SDK, istnieją wstępnie zdefiniowane listy elementów różnych typów elementów (na przykład Compile
dla plików źródłowych, Content
dla niektórych plików statycznych itd.), które są już zdefiniowane przez standardowe importy. Listę tych elementów można znaleźć w artykule Typowe elementy projektu MSBuild. W kodzie projektu są one wstępnie zdefiniowane, aby uwzględnić wszystkie istotne elementy; na przykład Compile
w projekcie języka C# zawiera wszystkie pliki z .cs
rozszerzeniem .
Aby wykluczyć pliki, możesz użyć atrybutu Remove
w elemencie .
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
Można określić wiele pojedynczych plików lub różne wzorce globu:
<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>
Aby uzyskać listę obsługiwanych wzorców, zobacz Formaty wzorców.
Dołączanie i wykluczanie plików lub katalogów w języku MSBuild
W nieprzetworzonym języku MSBuild (czyli bez żadnego ze standardowych importów lub odwołania do zestawu SDK) elementy, które mają zostać dołączone, są deklarowane oddzielnie lub jako grupa przy użyciu atrybutu Include
. Na przykład:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Jeśli używasz symboli wieloznacznych do uwzględnienia wszystkich plików w jednym katalogu lub zagnieżdżonego zestawu katalogów jako danych wejściowych dla kompilacji, może istnieć co najmniej jeden plik w katalogu lub jeden katalog w zagnieżdżonym zestawie katalogów, które nie chcesz uwzględniać. Aby wykluczyć element z listy elementów, użyj atrybutu Exclude
.
Exclude
nie jest operacją elementu; nie może być używany przez siebie, ale tylko jako modyfikator dla programu Include
.
Aby dołączyć wszystkie .cs
pliki lub *.vb
z wyjątkiem Form2
Użyj jednego z następujących
Include
atrybutów iExclude
:<CSFile Include="*.cs" Exclude="Form2.cs"/>
lub
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Aby uwzględnić wszystkie .cs
pliki lub .vb
z wyjątkiem Form2
i Form3
Użyj jednego z następujących
Include
atrybutów iExclude
:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
lub
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Aby uwzględnić wszystkie .jpg
pliki w podkatalogach katalogu z Images
wyjątkiem tych w Version2
katalogu
Użyj następujących
Include
atrybutów iExclude
:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
Uwaga
Należy określić ścieżkę dla obu atrybutów. Jeśli używasz ścieżki bezwzględnej do określania lokalizacji plików w atrybucie
Include
, musisz również użyć ścieżki bezwzględnej wExclude
atrybucie. Jeśli używasz ścieżki względnej w atrybucieInclude
, musisz również użyć ścieżki względnej w atrybucieExclude
.
Wykluczanie i usuwanie
Jeśli definiujesz własne listy elementów, należy użyć Exclude
zawsze, gdy jest to możliwe. Istnieje korzyść z wydajności użycia Exclude
w tej samej deklaracji co Include
, ponieważ elementy, które zostałyby wykluczone, nie muszą być przetwarzane.
Użyj Remove
polecenia , jeśli masz wstępnie zdefiniowaną listę elementów, na przykład w przypadku standardowych list elementów, takich jak Compile
i Content
. W takim przypadku Exclude
nie jest obsługiwane.
Uwaga
Jeśli używasz zestawu SDK, który go obsługuje, możesz ustawić $(OverrideDefaultCompileItems)
właściwość na true
, i zdefiniować własny Compile
element za pomocą Include
polecenia i, opcjonalnie, Exclude
.
Użyj warunków, aby wykluczyć plik lub katalog z danych wejściowych kompilacji
Jeśli istnieją elementy, które chcesz uwzględnić, na przykład w kompilacji debugowania, ale nie kompilacji wydania, możesz użyć atrybutu Condition
, aby określić warunki, w których ma zostać uwzględniny element.
Aby dołączyć plik Formula.vb tylko w kompilacjach wydania
Użyj atrybutu
Condition
podobnego do następującego:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Przykład
Poniższy przykład kodu tworzy projekt ze wszystkimi plikami .cs w katalogu z wyjątkiem 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>