MarkupCompilePass1 任务
更新:2007 年 11 月
MarkupCompilePass1 任务可将不可本地化的可扩展应用程序标记语言 (XAML) 项目文件转换为经过编译的二进制格式。
任务参数
参数 |
说明 |
---|---|
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)。有效的选项为 true 和 false。如果为 true,则生成代码以支持浏览器承载。 |
KnownReferencePaths |
可选的 String[] 参数。 指定对在生成过程中不更改的程序集的引用。包括位于全局程序集缓存 (GAC)、Microsoft .NET Framework 安装目录等位置中的程序集。 |
Language |
必需的 String 参数。 指定编译器支持的托管语言。有效选项为 C#、VB、JScript、J# 和 C++。 |
LanguageSourceExtension |
可选的 String 参数。 指定追加到所生成托管代码文件扩展名的扩展名: <Filename>.g<LanguageSourceExtension> 如果未使用特定的值来设置 LanguageSourceExtension 参数,则使用语言的默认源文件扩展名:.vb(适用于 Microsoft Visual Basic)和 .csharp(适用于 C#)。 |
LocalizationDirectivesToLocFile |
可选的 String 参数。 指定如何为每个源 XAML 文件生成本地化信息。有效选项为 None、CommentsOnly 和 All。 |
OutputPath |
必需的 String 参数。 指定在其中生成所生成托管代码文件和 XAML 二进制格式文件的目录。 |
OutputType |
必需的 String 参数。 指定项目生成的程序集的类型。有效选项为 winexe、exe、library 和 netmodule。 |
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 任务。
示例
下面的示例演示如何将三个 PageXAML 文件转换成二进制格式文件。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>
请参见
概念
Windows Presentation Foundation XAML 浏览器应用程序概述
其他资源
Windows Presentation Foundation MSBuild 参考