Исключение файлов из сборки
В файле проекта можно использовать wild карта s для включения всех файлов в один каталог или вложенный набор каталогов в качестве входных данных для сборки. Однако в каталоге может быть один файл или один каталог в вложенном наборе каталогов, которые не нужно включать в качестве входных данных для сборки. Этот файл или каталог можно явным образом исключить из списка входных данных. Кроме того, в проекте может быть файл, который требуется включить только при определенных условиях. Можно явно объявить условия, при которых файл включается в сборку.
Примечание.
Описанные в этой статье методы не применимы к F# и C++. Эти системы проектов управляют исходными файлами сами.
Исключение файла с помощью Visual Studio
Если вы используете Visual Studio, выберите файл в Обозреватель решений, просмотрите окно свойств (нажмите клавиши ALT+ВВОД) и задайте для действия сборки значение None.
Это приводит к следующим изменениям в файле проекта MSBuild:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
Это хорошо подходит для нескольких файлов, но не масштабируется до большего числа файлов или файлов, которые соответствуют определенному шаблону. В проектах .NET можно использовать MSBuild для исключения файлов и каталогов с помощью дикого выражения карта, также называемого глобом, как описано далее.
Исключение файлов или каталогов в проектах .NET
Списки элементов являются входными файлами для сборки. Для большинства проектов, таких как проекты пакета SDK для .NET, существуют предопределенные списки элементов различных типов элементов (например, Compile
для исходных файлов, Content
для определенных статических файлов и т. д.), которые уже определены стандартными импортами. Список этих элементов можно найти в элементах проекта Common MSBuild. В коде проекта они предопределяются для включения всего соответствующего; Например, Compile
в проекте C# содержатся все файлы с расширением .cs
.
Чтобы исключить файлы, можно использовать Remove
атрибут элемента.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
Можно указать несколько отдельных файлов или различные шаблоны глобов:
<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>
Список поддерживаемых шаблонов см. в разделе "Форматы шаблонов".
Включение и исключение файлов или каталогов на языке MSBuild
В необработанном языке MSBuild (то есть без стандартного импорта или ссылки на пакет SDK) элементы, которые необходимо включить, объявляются отдельно или как группа с помощью атрибута Include
. Например:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Если вы используете wild карта s для включения всех файлов в один каталог или вложенный набор каталогов в качестве входных данных для сборки, может быть один или несколько файлов в каталоге или одном каталоге в вложенном наборе каталогов, которые вы не хотите включить. Чтобы исключить элемент из списка элементов, используйте атрибут Exclude
.
Exclude
не является операцией элемента; его нельзя использовать самостоятельно, но только в качестве модификатора Include
.
Включение всех .cs
или файлов, *.vb
кроме Form2
Используйте один из следующих атрибутов
Include
иExclude
:<CSFile Include="*.cs" Exclude="Form2.cs"/>
or
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Включение всех или файлов.cs
, .vb
кроме Form2
Form3
Используйте один из следующих атрибутов
Include
иExclude
:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
or
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Включение всех .jpg
файлов в подкаталоги Images
каталога, кроме файлов в каталоге Version2
.
Используйте следующие атрибуты
Include
иExclude
:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
Примечание.
Нужно указать путь для обоих атрибутов. Если вы используете абсолютный путь для указания расположения файлов в атрибуте
Include
, нужно использовать абсолютный путь и в атрибутеExclude
. Если же вы используете относительный путь в атрибутеInclude
, такой путь нужно использовать и в атрибутеExclude
.
Исключение и удаление
Если вы определяете собственные списки элементов, следует использовать Exclude
каждый раз, когда это возможно. Существует преимущество производительности для использования Exclude
в том же объявлении, что и Include
элементы, которые будут исключены, не должны обрабатываться.
Используйте Remove
при наличии предопределенного списка элементов, например в случае стандартных списков элементов, таких Compile
как и Content
. В этом случае Exclude
не поддерживается.
Примечание.
Если вы используете пакет SDK, поддерживающий его, можно задать для свойства true
значение , а также определить собственный Compile
элемент с Include
помощью и, при необходимости, Exclude
.$(OverrideDefaultCompileItems)
Использование условий для исключения файла или каталога из входных данных для сборки
Если имеются элементы, которые требуется включить, например, в отладочную сборку, но не в сборку выпуска, можно использовать атрибут Condition
, чтобы указать условия для включения элемента.
Включение файла Formula.vb только в сборки выпуска
Используйте атрибута
Condition
по аналогии со следующей процедурой:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Пример
В следующем примере кода выполняется сборка проекта со всеми CS-файлами из каталога, кроме файла 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>