MarkupCompilePass1 任务

MarkupCompilePass1 任务将不可本地化的 可扩展应用程序标记语言 (XAML) 项目文件转换为编译的二进制格式。

任务参数

Parameter

说明

AllGeneratedFiles

可选 ITaskItem[] 输出参数。

包含 MarkupCompilePass1 任务所生成的文件的完整列表。

AlwaysCompileMarkupFilesInSeparateDomain

可选 Boolean 参数。

指定是否在单独的 AppDomain 中运行任务。 如果此参数返回 false,则任务将在与 Microsoft Build Engine (MSBuild) 相同的 AppDomain 中运行,并且它运行得更快。 如果参数返回 true,则任务将在与 MSBuild 彼此隔离的另一个 AppDomain 中运行,并且运行得较慢。

ApplicationMarkup

可选 ITaskItem[] 参数。

指定应用程序定义的 XAML 文件的名称。

AssembliesGeneratedDuringBuild

可选 String[] 参数。

指定对在生成过程中发生变化的程序集的引用。 例如,Microsoft Visual Studio 2005 解决方案可能包含一个项目,该项目引用另一个项目的已编译输出。 在这种情况下,可以将第二个项目的已编译输出添加到 AssembliesGeneratedDuringBuild 参数。

注意:AssembliesGeneratedDuringBuild 参数必须包含对生成解决方案所生成的一组完整程序集的引用。

AssemblyName

必选 String 参数。

指定为项目生成的程序集的简称。 例如,如果项目生成名称为 WinExeAssembly.exe 的 Windows 可执行文件,则 AssemblyName 参数的值为 WinExeAssembly

AssemblyPublicKeyToken

可选 String 参数。

指定程序集的公钥标记。

AssemblyVersion

可选 String 参数。

指定程序集的版本号。

ContentFiles

可选 ITaskItem[] 参数。

指定松散的内容文件列表。

DefineConstants

可选 String 参数。

指定保留 DefineConstants 的当前值, 这会影响目标程序集的生成;如果更改此参数,则目标程序集中的公共 API 可能会发生更改,并且引用本地类型的 XAML 文件的编译将会受到影响。

ExtraBuildControlFiles

可选 ITaskItem[] 参数。

指定用于控制在重新运行 MarkupCompilePass1 任务时是否触发重新生成的文件列表;如果这些文件其中之一发生了变化,则触发重新生成。

GeneratedBamlFiles

可选 ITaskItem[] 输出参数。

包含以 XAML 二进制格式生成的文件的列表。

GeneratedCodeFiles

可选 ITaskItem[] 输出参数。

包含生成的托管代码文件列表。

GeneratedLocalizationFiles

可选 ITaskItem[] 输出参数。

包含为每个可本地化的 XAML 文件生成的本地化文件的列表。

HostInBrowser

可选 String 参数。

指定生成的程序集是否为 XAML 浏览器应用程序 (XBAP)。 有效的选项为 truefalse。 如果为 true,则生成代码以支持浏览器承载。

KnownReferencePaths

可选 String[] 参数。

指定对在生成过程中不更改的程序集的引用。 包括位于 全局程序集缓存 (GAC)、Microsoft .NET Framework 安装目录等位置中的程序集。

Language

必选 String 参数。

指定编译器支持的托管语言。 有效的选项为 C#VBJScriptC++

LanguageSourceExtension

可选 String 参数。

指定追加到所生成的托管代码文件扩展名的扩展名:

<Filename>.g<LanguageSourceExtension>

如果未采用特定的值来设置 LanguageSourceExtension 参数,则使用语言的默认源文件名扩展名:.vb(适用于 Microsoft Visual Basic)和 .csharp(适用于 C#)。

LocalizationDirectivesToLocFile

可选 String 参数。

指定如何为每个源 XAML 文件生成本地化信息。 有效选项为 NoneCommentsOnlyAll

OutputPath

必选 String 参数。

指定在其中生成所生成的托管代码文件和 XAML 二进制格式文件的目录。

OutputType

必选 String 参数。

指定项目生成的程序集的类型。 有效选项为 winexeexelibrarynetmodule

PageMarkup

可选 ITaskItem[] 参数。

指定要处理的 XAML 文件列表。

References

可选 ITaskItem[] 参数。

指定文件中对包含 XAML 文件中所使用类型的程序集的引用。

RequirePass2ForMainAssembly

可选 Boolean 输出参数。

指明项目是否包含不可本地化的 XAML 文件(这些文件引用嵌入到主程序集中的本地类型)。

RequirePass2ForSatelliteAssembly

可选 Boolean 输出参数。

指明项目是否包含可本地化的 XAML 文件(这些文件引用嵌入在主程序集中的本地类型)。

RootNamespace

可选 String 参数。

为项目内部的类指定根命名空间。 当对应的 XAML 文件未包括 x:Class 特性时,RootNamespace 也将用作所生成托管代码文件的默认命名空间。

SourceCodeFiles

可选 ITaskItem[] 参数。

指定当前项目的代码文件列表。 此列表不包括所生成的特定于语言的托管代码文件。

UICulture

可选 String 参数。

为在其中嵌入所生成的 XAML 二进制格式文件的用户界面区域性指定附属程序集。 如果未设置 UICulture,则所生成的 XAML 二进制格式文件将嵌入在主程序集中。

XAMLDebuggingInformation

可选 Boolean 参数。

如果为 true,则会生成诊断信息并将其包括在编译的 XAML 中,以便帮助进行调试。

备注

MarkupCompilePass1 任务通常将 XAML 编译为二进制格式并生成代码文件。 如果 XAML 文件包含对在相同项目中定义的类型的引用,则将此文件编译为二进制格式的任务会被 MarkupCompilePass1 推迟到第二次标记编译 (MarkupCompilePass2) 中。 必须将此类文件的编译工作向后推迟,因为必须等到所引用的以本地方式定义的类型编译完后,才会对它们进行编译。 但是,如果 XAML 文件具有 x:Class 特性,则 MarkupCompilePass1 将为其生成特定于语言的代码文件。

如果 XAML 文件包含使用 x:Uid 特性的元素,则此文件是可本地化的文件:

<Page x:Class="WPFMSBuildSample.Page1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    x:Uid="Page1Uid"
    >
  ...
</Page>

XAML 文件在声明 XML 命名空间(该命名空间使用 clr-namespace 值来表示当前项目中的命名空间)时,它将引用以本地方式定义的类型:

<Page x:Class="WPFMSBuildSample.Page1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:localNamespace="clr-namespace:WPFMSBuildSample"
    >
    <Grid>
      <Grid.Resources>
        <localNameSpace:LocalType x:Key="localType" />
      </Grid.Resources>
      ...
    </Grid>
</Page>

如果有任何 XAML 文件可进行本地化,或引用了以本地方式定义的类型,则需要进行第二次标记编译处理,这需要先运行 GenerateTemporaryTargetAssembly 任务,然后再运行 MarkupCompilePass2 任务

示例

下面的示例演示如何将三个 Page XAML 文件转换成二进制格式文件。 Page1 包含对位于项目的根命名空间中的类型 Class1 的引用,因此在这次标记编译中不会转换为二进制格式文件。 而是会先执行 GenerateTemporaryTargetAssembly 任务,然后再执行 MarkupCompilePass2 任务

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask 
    TaskName="Microsoft.Build.Tasks.Windows.MarkupCompilePass1" 
    AssemblyFile="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationBuildTasks.dll" />
  <Target Name="MarkupCompilePass1Task">
    <MarkupCompilePass1 
      AssemblyName="WPFMSBuildSample"
      Language="C#"
      OutputType="WinExe"
      OutputPath="obj\Debug\"
      ApplicationMarkup="App.xaml"
      PageMarkup="Page1.xaml;Page2.xaml;Page3.xaml"
      SourceCodeFiles="Class1.cs"
      References="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" />
  </Target>
</Project>

请参见

概念

生成 WPF 应用程序 (WPF)

WPF XAML 浏览器应用程序概述

其他资源

WPF MSBuild 参考

WPF MSBuild 任务引用

MSBuild 参考

MSBuild 任务参考