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[] 輸出參數。 包含產生的 Managed 程式碼檔案清單。 |
GeneratedLocalizationFiles |
選擇性 ITaskItem[] 輸出參數。 包含為每個可當地語系化的 XAML 檔案產生的當地語系化檔案清單。 |
HostInBrowser |
選擇性 String 參數。 指定產生的組件是否為 XAML 瀏覽器應用程式 (XBAP)。有效選項為 true 和 false。如果為 true,則會產生程式碼來支援瀏覽器裝載。 |
KnownReferencePaths |
選擇性 String[] 參數。 指定在建置程序期間不會變更的組件參考。其中包含位於全域組件快取 (GAC)、Microsoft .NET Framework 安裝目錄等的組件。 |
Language |
必要的 String 參數。 指定編譯器支援的 Managed 語言。有效選項為 C#、VB、JScript、J# 和 C++。 |
LanguageSourceExtension |
選擇性 String 參數。 指定擴充,這個擴充會附加至產生之 Managed 程式碼檔案的擴充: <Filename>.g<LanguageSourceExtension> 如果 LanguageSourceExtension 參數沒有設定特定值,則會使用語言的預設原始程式檔副檔名:Microsoft Visual Basic 為 .vb,C# 為 .csharp。 |
LocalizationDirectivesToLocFile |
選擇性 String 參數。 指定如何產生每個 XAML 原始程式檔的當地語系化資訊。有效選項包括 None、CommentsOnly 和 All。 |
OutputPath |
必要的 String 參數。 指定所產生的 Managed 程式碼檔案和 XAML 二進位格式檔案要在哪個目錄中產生。 |
OutputType |
必要的 String 參數。 指定專案所產生組件的類型。有效選項為 winexe、exe、library 和 netmodule。 |
PageMarkup |
選擇性 ITaskItem[] 參數。 指定要處理的 XAML 檔案清單。 |
References |
選擇性 ITaskItem[] 參數。 指定檔案對包含 XAML 檔案所用型別之組件的參考清單。 |
RequirePass2ForMainAssembly |
選擇性 Boolean 輸出參數。 表示專案是否包含不可當地語系化的 XAML 檔案,這些檔案參考內嵌到主要組件的區域型別。 |
RequirePass2ForSatelliteAssembly |
選擇性 Boolean 輸出參數。 表示專案是否包含可當地語系化的 XAML 檔案 (這些檔案參考內嵌到主要組件的區域型別)。 |
RootNamespace |
選擇性 String 參數。 指定專案內部類別的根命名空間。若對應的 XAML 檔案沒有 x:Class 屬性,則產生的 Managed 程式碼檔案也會使用 RootNamespace 做為預設命名空間。 |
SourceCodeFiles |
選擇性 ITaskItem[] 參數。 指定目前專案的程式碼檔案清單。此清單不包含產生的語言特定 Managed 程式碼檔案。 |
UICulture |
選擇性 String 參數。 指定 UI 文化特性 (Culture) 的附屬組件,產生的 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 參考