2010-05-21 11 views
14

estoy tratando de utilizar un componente de tercera parte en mi aplicación Silverlight y cuando trato de crear una instancia del control, aparece un XamlParseException:¿Cómo se depura una XamlParseException?

{System.Windows.Markup.XamlParseException: **Set property 'System.Windows.FrameworkElement.Style' threw an exception.** [Line: 0 Position: 0] 
---> System.Windows.Markup.XamlParseException: **Elements in the same ResourceDictionary cannot have the same x:Key** [Line: 1739 Position: 47]  
at MS.Internal.XcpImports.CreateFromXaml(UnmanagedMemoryStream stream, String sourceAssemblyName, boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers)  
at System.Windows.Controls.Control.GetBuiltInStyle(IntPtr nativeTarget, IntPtr& nativeStyle)  
--- End of inner exception stack trace ---  
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)  
at SpellCheckerSample.StandardSpellDialog.InitializeComponent()  
at SpellCheckerSample.StandardSpellDialog..ctor()} 

¿Cómo puedo depurar esto? ¿Cómo puedo saber en qué línea de archivo 1739 está ubicada la Posición 47?

Respuesta

2

Resulta que mi problema específico es que el componente ComponentOne sólo funciona bajo Silverlight 4. Una vez que he cambiado para apuntar SL4 todo planeado.

+0

¡Qué error tan extraño de reportar. –

+1

Sí, y una gran pérdida de tiempo! Gracias por sus sugerencias. –

7

Podría ser un poco problemático de encontrar. Básicamente, intente recopilar tantos detalles como sea posible del depurador.

  1. Configure el depurador para romper en XamlParseException.
  2. Eche un vistazo a la pila de llamadas. Es posible que el constructor del control ofensivo esté en la pila de llamadas.
  3. Cuando está en pausa, vaya a la ventana de depuración de Locals para ver si algún parámetro de la función revela más acerca de qué componente es.
  4. Si no haga doble clic en la siguiente entrada de la pila hacia abajo y vaya al paso 3.
  5. Repita los pasos 3 y 4.

Después de escribir esto me di cuenta de que el constructor del control es hecho en la pila de llamadas y es SpellCheckerSample. Es muy probable que sea la página .XAML para ese control. Si puede obtener acceso a la fuente, es probable que el nombre de archivo sea algo así como SpellCheckerSample.xaml.

El error en sí es bastante directo, parece que hay varias cosas definidas con la misma clave en el mismo ResourceDictionary. El código de abajo hará que esto suceda:

<Window.Resources> 
    <myConverters:BananaToCarrotConverter x:Key="StupidestConverterEver" /> 
    <myConverters:BananaToAppleConverter x:Key="StupidestConverterEver" /> 
<Window.Resources> 
+1

Sí, estoy de acuerdo. Sería bueno si pudieras ver qué clave era la que estaba causando el problema. Agradezco su ayuda, pero no me ha llevado a ninguna parte útil todavía :( –

+0

¿Tiene la fuente para esta biblioteca? Si tiene el archivo correcto, la línea: 1739 Posición: 47 lo llevará al recurso que está causando la problema. –

+0

En realidad, es el componente ComponentOne Silverlight SpellChecker. Acabo de hackear mi aplicación, eliminando todos los recursos en mi archivo App.xaml, y aún falla. Sin embargo, tengo una aplicación de muestra de ComponentOne que funciona bien. Muy extraño. Sin embargo, ¡seguiré pirateando hasta que lo encuentre! –

-1

Debería ver un error en el archivo .cs al intentar ejecutar la aplicación. Y el archivo .xaml correspondiente para este archivo .cs con un número de línea dado y una columna es el correcto.

0

Compruebe qué referencias de ResourceDictionary tiene: el problema es que uno de ellos recibió un error que debe corregirse.

Si su causa es la causa de la aplicación, probablemente sea uno de sus directorios fusionados, de lo contrario el control en cuestión.

También compruebe que no le falta el uso del directorio de recursos para los estilos (ayuda si recibió ReSharper ya que recibirá una advertencia en tiempo de diseño XAML).

enter image description here

0
  1. Configurar el depurador para romper el XamlParseException (Depurar -> Excepciones -> Common Language Runtime Exceptins -> System.Windows.Markup -> XamlParseException línea -> set garrapata en la columna de torcer)
  2. Tome un vistazo a la excepción en el depurador (especialmente en InnerException y LineNumber propiedades)
  3. tratar de ir a través de la línea de pila de llamadas por línea. Mientras selecciona una línea, mire la ventana Locales.Revela algunas variables incluso en el código de Framework que pueden ser útiles.
  4. Intenta eliminar una parte de XAML y ver si la excepción vuelve a ocurrir. Esto lo ayudará a encontrar el código que causa problemas.
Cuestiones relacionadas