GenerateTemporaryTargetAssembly 任务
如果项目中至少有一个 XAML 页引用该项目中本地声明的类型,则 GenerateTemporaryTargetAssembly 任务会生成一个程序集。 在生成过程完成后或者在生成过程失败的情况下,生成的程序集会被删除。
任务参数
参数 | 说明 |
---|---|
AssemblyName |
必需的 String 参数。 指定为项目生成的程序集的短名称,该名称同时也是临时生成的目标程序集的名称。 例如,如果项目生成一个名为 WinExeAssembly.exe 的 Windows 可执行文件,则 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 文件所使用的类型。 在其运行以允许被推迟的编译 XAML 文件转换为二进制格式时,会向 MarkupCompilePass2 提供一个对已生成程序集的引用。
示例
以下示例会生成一个临时程序集,因为 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>