Задача GenerateTemporaryTargetAssembly
Задача GenerateTemporaryTargetAssembly создает сборку, если по меньшей мере одна страница XAML в проекте ссылается на тип, объявленный в этом проекте локально. Созданная сборка удаляется после успешного или неудачного завершения процесса сборки.
Параметры задачи
Параметр | Описание |
---|---|
AssemblyName |
Обязательный параметр string. Задает короткое имя сборки, которая создается для проекта, и которое также используется для временно создаваемой конечной сборки. Например, если проект создает исполняемый файл Windows с именем WinExeAssembly.exe, параметр AssemblyName имеет значение WinExeAssembly. |
CompileTargetName |
Обязательный параметр string. Указывает имя целевого объекта MSBuild, который используется для создания сборок из файлов исходного кода. Для параметра CompileTargetName обычно используется значение CoreCompile. |
CompileTypeName |
Обязательный параметр string. Задает тип компиляции, которую выполняет целевой объект, указанный в параметре CompileTargetName. Для целевого объекта CoreCompile этот параметр имеет значение Compile. |
CurrentProject |
Обязательный параметр string. Указывает полный путь к файлу проекта MSBuild для проекта, которому требуется временная конечная сборка. |
GeneratedCodeFiles |
Необязательный параметр ITaskItem[]. Указывает список файлов управляемого кода для определенного языка, созданных задачей MarkupCompilePass1. |
IntermediateOutputPath |
Обязательный параметр string. Указывает каталог, в котором создана временная конечная сборка. |
MSBuildBinPath |
Обязательный параметр string. Указывает расположение файла MSBuild.exe, который необходим для компиляции временной конечной сборки. |
ReferencePath |
Необязательный параметр ITaskItem[]. Указывает список сборок (имя файла и путь), на которые ссылаются все типы, скомпилированные во временной конечной сборке. |
ReferencePathTypeName |
Обязательный параметр string. Задает параметр, используемый параметром целевого объекта компиляции (CompileTargetName), который задает список ссылок на сборку (ReferencePath). Мы рекомендуем использовать значение ReferencePath. |
Замечания
При первом проходе компиляции разметки, который выполняет процесс MarkupCompilePass1, файлы XAML компилируются в двоичный формат. Для этого компилятору требуется список сборок, на которые есть ссылки и которые содержат типы, используемые в файлах XAML. Но если файл XAML использует тип, который определен в том же проекте, соответствующая сборка для этого проекта не будет создана, пока не будет выполнена сборка проекта. Следовательно, ссылку на сборку во время первого прохода компиляции разметки предоставить невозможно.
Вместо этого MarkupCompilePass1 откладывает преобразование файлов XAML, которые содержат ссылки на типы, определенные в том же проекте, до второй компиляции разметки, которую выполнит процесс MarkupCompilePass2. До момента выполнения MarkupCompilePass2 создается временная сборка. Эта сборка содержит типы, используемые файлами XAML, компиляция разметки для которых была отложена. Ссылка на созданную сборку передается в MarkupCompilePass2 при его запуске, чтобы он мог выполнить отложенную компиляцию файлов XAML в двоичный формат.
Пример
Следующий пример создает временную сборку, так как файл Page1.xaml содержит ссылку на тип, определенный в том же проекте.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask
TaskName="Microsoft.Build.Tasks.Windows.GenerateTemporaryTargetAssembly"
AssemblyFile="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationBuildTasks.dll" />
<Target Name="GenerateTemporaryTargetAssemblyTask">
<GenerateTemporaryTargetAssembly
AssemblyName="WPFMSBuildSample"
CompileTargetName="CoreCompile"
CompileTypeName="Compile"
CurrentProject="FullBuild.proj"
GeneratedCodeFiles="obj\debug\app.g.cs;obj\debug\Page1.g.cs;obj\debug\Page2.g.cs"
ReferencePath="c:\windows\Microsoft.net\Framework\v2.0.50727\System.dll;C:\Program Files\Reference Assemblies\Microsoft\WinFx\v3.0\PresentationCore.dll;C:\Program Files\Reference Assemblies\Microsoft\WinFx\v3.0\PresentationFramework.dll;C:\Program Files\Reference Assemblies\Microsoft\WinFx\v3.0\WindowsBase.dll"
IntermediateOutputPath=".\obj\debug\"
MSBuildBinPath="$(MSBuildBinPath)"
ReferencePathTypeName="ReferencePath"/>
</Target>
</Project>