Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В файле проекта можно использовать подстановочные знаки для включения всех файлов в один каталог или вложенный набор каталогов в качестве входных данных для сборки. Однако в каталоге может быть один файл или один каталог в вложенном наборе каталогов, которые не нужно включать в качестве входных данных для сборки. Вы можете явно исключить этот файл или каталог из списка входных данных. В проекте также может быть файл, который требуется включить только в определенных условиях. Вы можете явно объявить условия, при которых файл включен в сборку.
Замечание
Описанные в этой статье методы не применимы к F# и C++. Эти системы проектов управляют исходными файлами сами.
Исключение файла с помощью Visual Studio
Если вы используете Visual Studio, выберите файл в обозревателе решений, откройте окно свойств (нажмите Alt++Enter) и установите действие сборки на 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"/>
Если вы используете подстановочные знаки для включения всех файлов в один каталог или вложенный набор каталогов в качестве входных данных для сборки, может быть один или несколько файлов в каталоге или один каталог в вложенном наборе каталогов, которые вы не хотите включить. Чтобы исключить элемент из списка элементов, используйте Exclude
атрибут.
Exclude
не является операцией элемента; его нельзя использовать самостоятельно, но только в качестве модификатора Include
.
Включить все файлы .cs
или .vb
, за исключением Form2
.
Используйте один из следующих
Include
атрибутов иExclude
атрибутов:<CSFile Include="*.cs" Exclude="Form2.cs"/>
или
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Включить все файлы .cs
или .vb
, кроме Form2
и Form3
Используйте один из следующих
Include
атрибутов иExclude
атрибутов:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
или
<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, поддерживающий эту функцию, можно задать для свойства $(OverrideDefaultCompileItems)
значение true
и определить собственный элемент Compile
с помощью Include
, и при необходимости, Exclude
.
Использование условий для исключения файла или каталога из входных данных для сборки
Если есть элементы, которые необходимо включить, например, в сборку отладки, но не сборку выпуска, можно использовать 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>