Скомпилировать Xaml в Baml? - PullRequest
7 голосов
/ 01 июня 2009

Как я могу преобразовать xaml в baml?

спасибо

Ответы [ 2 ]

11 голосов
/ 11 ноября 2009

Вы можете скомпилировать XAML, создав файл проекта MSBuild, который ссылается на него. Это то, что происходит в 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

Это создаст файл baml в obj \ Debug, в приведенном выше примере это будет obj \ Debug \ Themes \ Generic.baml.

Надеюсь, это поможет.

2 голосов
/ 01 июня 2009

Существует подключаемый модуль Reflector, который загружает сборки, содержащие ресурсы BAML (например, локализованные сборки ресурсов), и отображает соответствующий XAML: BamlViewer

Когда вы компилируете приложение WPF в Visual Studio, все ваши файлы XAML преобразуются в BAML, а затем этот BAML встраивается в качестве ресурса в окончательную сборку DLL или EXE.

...