Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании большого проекта важно, чтобы встроенные целевые объекты, которые по-прежнему up-to-date не перестраиваются. Если все целевые объекты создаются каждый раз, каждая сборка может занять много времени.
В инкрементальной сборке собираются только не собранные цели проекта или устаревшие цели. Модуль сборки Microsoft (MSBuild) сравнивает метки времени входных файлов с метками времени выходных файлов. MSBuild определяет, следует ли пропускать, создавать или частично перестраивать каждый целевой объект.
Процесс добавочной сборки требует сопоставления между входными и выходными данными для целевых объектов. Преобразования можно использовать для настройки целевых объектов с целью идентификации сопоставления входных данных с выходными. Дополнительные сведения см. в разделе Преобразования.
Указание входных и выходных данных
MSBuild может создавать целевой объект постепенно, если входные и выходные данные в целевом объекте указаны в файле проекта. Вы указываете значения с помощью атрибутов Inputs и Outputs элемента Target.
В следующем примере указывается список элементов @(CSFile) для Inputs и файла hello.exe для Outputs цели.
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
...
</Target>
MSBuild сравнивает метки времени входных данных и выходные данные целевого объекта. В примере, если любой файл в @(CSFile) списке элементов является более новым, чем файл hello.exe , MSBuild создает целевой объект. В противном случае целевой объект пропускается:
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
<Csc
Sources="@(CSFile)"
OutputAssembly="hello.exe"/>
</Target>
Сравнение сопоставления "один к одному" и "без прямого сопоставления"
При указании входных и выходных данных в целевом объекте каждая выходная связь сопоставляется с одним входным вводом напрямую или не существует прямого сопоставления между выходными данными и входными данными. В примере задача Csc указывает выходную сборку, которая не сопоставляется с одним входным вводом. Для этой задачи выходные данные зависят от всех входных данных.
Ниже приведены некоторые соображения о сопоставлении "один к одному" в отличие от отсутствия прямого соответствия:
Целевой объект без прямого сопоставления входных и выходных данных всегда строится чаще, чем целевой объект, в котором каждый выход сопоставляется с одним входным вводом. Если целевой объект не имеет прямого сопоставления, MSBuild не может определить конкретные выходные данные для перестроения при изменении только некоторых входных данных.
Задачи, которые могут определить прямое сопоставление между выходными данными и входными данными, наиболее подходят для добавочных сборок. Примером является задача LC, которая создает .license файл.
Задачи, которые создают одну выходную сборку из нескольких входных данных, не подходят для добавочных сборок. Примерами являются задача Csc , которая упаковывает файлcsc.exe и создает исполняемые файлы, библиотеки и модули, а также задачу Vbc , которая упаковывает файлvbc.exe .
Использование преобразований для создания сопоставления "один к одному"
В следующем примере определяется проект, который создает файлы содержимого для системы справки. Проект работает, преобразуя исходные файлы .txt в промежуточные .content файлы, которые объединяются с XML-файлами метаданных для создания окончательного файла справки, используемого системой. Проект включает следующие задачи:
-
GenerateContentFiles: преобразует .txt файлы в .content файлы. -
BuildHelp: объединяет файлы содержимого и XML-метаданные для создания окончательного файла справки .
Проект использует преобразования для создания сопоставления "один к одному" между входными и выходными данными в GenerateContentFiles задаче. Элемент Output настраивается таким образом, чтобы автоматически использовать выходные данные задачи GenerateContentFiles в качестве входных данных для задачи BuildHelp.
Файл проекта содержит Convert и Build целевые объекты. Задачи GenerateContentFiles и BuildHelp размещаются в целях Convert и Build соответственно, чтобы каждая цель могла создаваться постепенно. Определение Output элемента помещает выходные данные GenerateContentFiles задачи в ContentFile список элементов для использования в качестве входных данных для BuildHelp задачи. Этот подход автоматически предоставляет выходные данные одной задачи в качестве входных данных для другой задачи. Вам не нужно указывать отдельные элементы или списки элементов вручную в каждой задаче.
Замечание
Хотя целевой Convert объект может создаваться постепенно, все выходные данные из этого целевого объекта всегда требуются в качестве входных данных для целевого Build объекта. MSBuild автоматически предоставляет все выходные данные одной цели в качестве входных данных для другой цели при использовании элемента Output.
<Project DefaultTargets="Build">
<ItemGroup>
<TXTFile Include="*.txt"/>
<XMLFiles Include="\metadata\*.xml"/>
</ItemGroup>
<Target Name = "Convert"
Inputs="@(TXTFile)"
Outputs="@(TXTFile->'%(Filename).content')">
<GenerateContentFiles
Sources = "@(TXTFile)">
<Output TaskParameter = "OutputContentFiles"
ItemName = "ContentFiles"/>
</GenerateContentFiles>
</Target>
<Target Name = "Build" DependsOnTargets = "Convert"
Inputs="@(ContentFiles);@(XMLFiles)"
Outputs="$(MSBuildProjectName).help">
<BuildHelp
ContentFiles = "@(ContentFiles)"
MetadataFiles = "@(XMLFiles)"
OutputFileName = "$(MSBuildProjectName).help"/>
</Target>
</Project>
Связанный контент
- Целевые объекты
- Целевой элемент (MSBuild)
- преобразования