wpf xaml baml

wpf - Por qué XAML está compilado en BAML y no en C#



(3)

El Xaml está separado del código c # porque permite que estos elementos estén "codificados por software". Si compila el código de Xaml a C #, vence esta característica, porque ahora los elementos de la IU, el enlace de datos, el evento, etc. ahora están codificados en el programa, y ​​necesita recompilar todo el programa para hacer un cambio menor a la interfaz de usuario.

La publicación del blog que petr k. referencias dice que Xaml en realidad fue compilado a IL al mismo tiempo, pero Baml ahora se usa porque:

  1. Es más seguro (no se puede ejecutar directamente) y
  2. Baml puede ser localizado (diferentes idiomas) sin requerir una recompilación.

Hasta donde yo sé, todo lo que se hace en XAML se puede hacer en C #.

¿Por qué XAML está compilado en BAML y no en C #? ¿No sería más eficiente analizar el XAML en tiempo de compilación y crear el código C # correspondiente?


En teoría, todos los XAML se pueden compilar en el C # equivalente (aunque BAML se usa en la práctica).

Consulte el generador de código XAML Behind en http://xamlgenerator.codeplex.com/ .

Es un complemento para Visual Studio 2010 que le permite compilar XAML en el C # equivalente, es realmente interesante tener una idea de cómo se compila XAML en C #.


Esta publicación de blog debe proporcionar una respuesta completa: http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-3D00-BAML-not-IL.aspx

Ayer di una conferencia sobre XAML y me hicieron la siguiente pregunta: ¿Por qué XAML está compilado en BAML y no directamente en IL para un mejor rendimiento?

Antes de dar la respuesta correcta, quiero explicar qué es BAML.

En realidad, hay dos maneras de manejar un archivo XAML: Suelto o Compilado.

  1. El archivo XAML suelto se debe analizar en tiempo de ejecución y se puede implementar como un archivo XML simple, localmente, de forma remota o incrustado en el ensamblado.
  2. Compilado es un archivo XAML marcado como "Página" en Visual Studio (en MSBuild), implementado como un archivo BAML (Lenguaje de marcado de aplicaciones binarias) e incorporado como un recurso de ensamblaje.

Un archivo suelto XAML no puede incluir la palabra clave x: Clase XAML, tampoco puede incrustar un código fuente, ni puede emitir código por todos los medios. Es posible cargar un archivo XAML suelto llamando al método XamlReader.Load (), lanzando el valor de retorno en el elemento raíz. La versión suelto de XAML proporciona una forma dinámica de cargar y cambiar la vista, pero proporciona un rendimiento deficiente debido al hecho de que el archivo XML se analiza en tiempo de ejecución.

Un archivo XAML compilado (BAML) puede emitir código, utilizando x: Class o registrando eventos, por ejemplo. Es posible cargar un elemento desde dentro de BAML llamando a Application.LoadComponent () , lanzando el valor de retorno en el elemento raíz. La versión compilada de XAML proporciona un mejor rendimiento ya que es una versión binaria pre-tokenizada del archivo XAML, por lo tanto, es más pequeña y puede cargarse más rápido, pero no es dinámica.

Había una vez CAML. CAML era la versión exacta de IL del archivo XAML compilado. Desafortunadamente, el equipo de WPF decidió eliminarlo y conservar la versión BAML por los siguientes motivos:

  1. BAML es compacto, por lo tanto, se puede descargar más rápido (bueno para aplicaciones XBAP)
  2. BAML es menos peligroso para la seguridad que la ejecución del código (bueno para aplicaciones XBAP)
  3. BAML puede ser localizado después de la compilación

En la línea de fondo, BAML es un poco más lento que IL, pero tiene más ventajas que CAML.