MarkupCompilePass1 工作
MarkupCompilePass1 工作會將未當地語系化的 XAML 專案檔案轉換成已編譯的二進位格式。
參數 | 描述 |
---|---|
AllGeneratedFiles |
選擇性的 ITaskItem[] 輸出參數。 包含 MarkupCompilePass1 工作產生的完整檔案清單。 |
AlwaysCompileMarkupFilesInSeparateDomain |
選擇性的 Boolean 參數。 指定是否在不同的 AppDomain 中執行工作。 如果此參數傳回 false,工作就會在與 MSBuild 相同的 AppDomain 中執行,且執行速度會較快。 如果此參數傳回 true,工作就會在與 MSBuild 隔離的第二個 AppDomain 中執行,且執行速度會較慢。 |
ApplicationMarkup |
選擇性的 ITaskItem[] 參數。 指定應用程式定義 XAML 檔案的名稱。 |
AssembliesGeneratedDuringBuild |
選擇性的 String[] 參數。 指定對在建置程序中變更之組件的參考。 例如,Visual Studio 解決方案可能包含一個專案,此專案參考另一個專案的已編譯輸出。 在此情況下,可以將第二個專案的已編譯輸出新增到 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)、.NET 安裝目錄中等的組件。 |
Language |
必要的 String 參數。 指定編譯器支援的 Managed 語言。 有效的選項為 C#、VB、JScript 及 C++。 |
LanguageSourceExtension |
選擇性的 String 參數。 指定附加至所產生的 Managed 程式碼檔案之副檔名的副檔名: <Filename>.g<LanguageSourceExtension> 如果沒有為 LanguageSourceExtension 參數設定特定的值,就會使用語言的預設來源檔案副檔名:.vb (適用於 Visual Basic)、.csharp (適用於 C#)。 |
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 屬性時,RootNamespace 也用來作為所產生 Managed 程式碼檔案的預設命名空間。 |
SourceCodeFiles |
選擇性的 ITaskItem[] 參數。 指定目前專案的程式碼檔案清單。 此清單不包括已產生的語言特定 Managed 程式碼檔案。 |
UICulture |
選擇性的 String 參數。 指定要在其中內嵌所產生之 XAML 二進位格式檔案的 UI 文化特性 (Culture) 附屬組件。 如果未設定 UICulture,所產生的 XAML 二進位格式檔案就會內嵌在主要組件中。 |
XAMLDebuggingInformation |
選擇性的 Boolean 參數。 值為 true 時,會產生診斷資訊並包含在已編譯的 XAML 中,以協助偵錯。 |
MarkupCompilePass1 工作通常會將 XAML 編譯成二進位格式,並產生程式碼檔。 如果 XAML 檔案包含對相同專案中所定義之類型的參考,MarkupCompilePass1 就會將其二進位格式編譯延後至第二個標記編譯階段 (MarkupCompilePass2)。 這類檔案的編譯必須延後,因為它們必須等待所參考的本機定義類型編譯完成。 不過,如果 XAML 檔案具有 x:Class
屬性,則 MarkupCompilePass1 會產生其語言專屬的程式碼檔案。
XAML 檔案如果包含使用 x:Uid
屬性的元素,便是可當地語系化的檔案:
XML
<Page x:Class="WPFMSBuildSample.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Uid="Page1Uid"
>
...
</Page>
當 XAML 檔案宣告 XML 命名空間以使用 clr-namespace
值來參考目前專案中的命名空間時,會參考本機定義的類型:
XML
<Page x:Class="WPFMSBuildSample.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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。
下列範例示範如何將三個「頁面」 XAML 檔案轉換成二進位格式檔案。 Page1 包含對類型 Class1
(位於專案的根命名空間中) 的參考,因此無法在此標記編譯階段中轉換成二進位格式檔案。 取而代之的是,會執行 GenerateTemporaryTargetAssembly,接著執行 MarkupCompilePass2。
XML
<Project xmlns="http://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>