Задача 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>

См. также