Tarefa GenerateTemporaryTargetAssembly

A tarefa GenerateTemporaryTargetAssembly gera um assembly se pelo menos uma página XAML em um projeto referencia um tipo declarado localmente no projeto. O assembly gerado será removido após concluir o processo de build ou se o processo de build falhar.

Parâmetros de tarefa

Parâmetro Descrição
AssemblyName Parâmetro obrigatório String.

Especifica o nome curto do assembly que é gerado para um projeto e também é o nome do assembly de destino que é gerado temporariamente. Por exemplo, se um projeto gera um executável Windows cujo nome é WinExeAssembly.exe, o parâmetro AssemblyName tem um valor de WinExeAssembly.
CompileTargetName Parâmetro obrigatório String.

Especifica o nome do destino de MSBuild usado para gerar assemblies de arquivos de código-fonte. O valor típico para CompileTargetName é CoreCompile.
CompileTypeName Parâmetro obrigatório String.

Especifica o tipo de compilação é executada pelo destino que é especificado pelo parâmetro CompileTargetName. Para o destino CoreCompile, esse valor é Compile.
CurrentProject Parâmetro obrigatório String.

Especifica o caminho completo do arquivo de projeto MSBuild para o projeto que exige um assembly de destino temporário.
GeneratedCodeFiles Parâmetro opcional ITaskItem[].

Especifica a lista de arquivos de código gerenciado específicos a um idioma que foram gerados pela tarefa MarkupCompilePass1.
IntermediateOutputPath Parâmetro obrigatório String.

Especifica o diretório em que o assembly de destino temporário é gerado.
MSBuildBinPath Parâmetro obrigatório String.

Especifica o local do MSBuild.exe, que é necessário para compilar o assembly de destino temporário.
ReferencePath Parâmetro opcional ITaskItem[].

Especifica uma lista de assemblies, pelo caminho e nome de arquivo, que são referenciados pelos tipos que são compilados no assembly de destino temporário.
ReferencePathTypeName Parâmetro obrigatório String.

Especifica o parâmetro usado pelo parâmetro do destino de compilação (CompileTargetName) que especifica a lista de referências de assembly (ReferencePath). O valor apropriado é ReferencePath.

Comentários

A primeira passagem de compilação de marcação, que é executada pelo MarkupCompilePass1, compila arquivos XAML em formato binário. Consequentemente, o compilador precisa de uma lista dos assemblies referenciados que contêm os tipos usados pelos arquivos XAML. No entanto, se um arquivo XAML usa um tipo definido no mesmo projeto, um assembly correspondente para esse projeto não é criado até o projeto ser compilado. Portanto, uma referência de assembly não pode ser fornecida durante a primeira passagem de compilação de marcação.

Em vez disso, MarkupCompilePass1 adia a conversão de arquivos XAML que contêm referências a tipos no mesmo projeto para uma segunda passagem de compilação de marcação, que é executada por MarkupCompilePass2. Antes de MarkupCompilePass2 ser executada, um assembly temporário é gerado. Esse assembly contém os tipos usados pelos arquivos XAML, cuja passagem de compilação de marcação foi adiada. Uma referência ao assembly gerado é fornecida para MarkupCompilePass2 quando ela é executada para permitir que os arquivos XAML da compilação adiada sejam convertidos em formato binário.

Exemplo

O exemplo a seguir gera um assembly temporário porque Page1.xaml contém uma referência a um tipo que está no mesmo projeto.

<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>

Confira também