8

如何将 xaml 转换为 baml?

谢谢

4

2 回答 2

11

您可以通过创建引用它的 MSBuild 项目文件来编译 XAML。当您对项目进行编译时,这就是在 Visual Studio“幕后”发生的事情(它会创建一个临时的 .proj 文件并构建它)。

一个相当小的项目文件 (xamlcompile.csproj) 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <OutputType>library</OutputType>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <ProjectGuid>{6B8967FF-37B7-43E8-B866-FFD6F13FFC0A}</ProjectGuid>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data.DataSetExtensions">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="PresentationFramework.Classic" />
  </ItemGroup>
  <ItemGroup>
    <Page Include="Themes\Generic.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

然后您可以通过运行以下命令生成 BAML 文件:

MSBuild /t:ResolveReferences;MarkupCompilePass1;MarkupCompilePass2 xamlcompile.csproj

这将在 obj\Debug 下创建一个 baml 文件,在上面的示例中它将是 obj\Debug\Themes\Generic.baml。

希望有帮助。

于 2009-11-11T09:23:47.510 回答
2

有一个 Reflector 插件可以加载包含 BAML 资源的程序集(例如本地化资源程序集)并显示相应的 XAML:BamlViewer

在 Visual Studio 中编译 WPF 应用程序时,所有 XAML 文件都将转换为 BAML,然后将该 BAML 作为资源嵌入到最终的 DLL 或 EXE 程序集中。

于 2009-06-01T14:40:39.997 回答