La aplicación .NET no puede iniciarse y recibir XamlParseException

Escribí una aplicación que puede instalar y trabajar en mi PC de desarrollo (una ventana 7).

  • Entorno de desarrollo: Windows 7, VS2010 WPF C # con ambos .NET 4 y .NET 3.5 instalados

En otra computadora cliente (XP SP3, 2 y 1), se instala sin errores, pero no puede iniciarse. En el administrador de tareas, puedo ver que la aplicación ocupa la memoria brevemente antes de cerrarse por sí misma.

Me había asegurado la coherencia de .NET 3.5 en mi PC de desarrollo y en varias máquinas XP de clientes siguiendo:

  • La aplicación se dirige a .NET 3.5 (o 3.5 Client Profile )
  • Use el instalador VS2010 para la implementación: objectives .NET 3.5 en la condición de inicio
  • Ningún error en absoluto sobre la compatibilidad de .NET durante la depuración de la aplicación y el proyecto del instalador

eventvwr captó la siguiente advertencia:

¬º˛¿‡–Õ: ¥ÌŒÛ  ¬º˛¿¥'¥: .NET Runtime  ¬º˛÷÷¿‡: Œfi  ¬º˛ ID: 1026 »'∆⁄: 2011-10-18  ¬º˛: 15:18:32 ”√ªß: N/A º∆À„ª˙: WWW-9DB69D5A3AF √Ë ˆ: Application: Foo.exe Framework Version: v4.0.30319 Description: ”…”⁄Œ¥æ≠¥¶¿Ìµƒ“Ï≥££¨Ω¯≥Ã÷'÷π°£ “Ï≥£–≈œ¢: System.Windows.Markup.XamlParseException ∂—'ª: '⁄ System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri) '⁄ System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri) '⁄ System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri) '⁄ System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean) '⁄ System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext) '⁄ System.Windows.Application.LoadComponent(System.Uri, Boolean) '⁄ System.Windows.Application.DoStartup() '⁄ System.Windows.Application.b__1(System.Object) '⁄ System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) '⁄ MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) '⁄ System.Windows.Threading.DispatcherOperation.InvokeImpl() '⁄ System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) '⁄ System.Threading.ExecutionContext.runTryCode(System.Object) '⁄ System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object) '⁄ System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) '⁄ System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) '⁄ System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) '⁄ System.Windows.Threading.DispatcherOperation.Invoke() '⁄ System.Windows.Threading.Dispatcher.ProcessQueue() '⁄ System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) '⁄ MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) '⁄ MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) '⁄ System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) '⁄ MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) '⁄ System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) '⁄ MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) '⁄ MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) '⁄ System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) '⁄ System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) '⁄ System.Windows.Threading.Dispatcher.Run() '⁄ System.Windows.Application.RunDispatcher(System.Object) '⁄ System.Windows.Application.RunInternal(System.Windows.Window) '⁄ System.Windows.Application.Run(System.Windows.Window) '⁄ System.Windows.Application.Run() '⁄ FooSoftware.App.Main() ”–πÿ∏¸∂‡–≈œ¢£¨«Î≤Œ'ƒ'⁄ http://go.microsoft.com/fwlink/events.asp µƒ∞Ô÷˙∫Õ÷ß≥÷÷––ƒ°£ 

había esta XamlParseException que causaba que mi aplicación no se iniciara en XP Window Machine. Que esta pasando?

XamlParseException es el error genérico que ocurre cuando hay un problema al inicio de la aplicación. Sugiero que modifique el código de inicio de la aplicación para rastrear lo que realmente está sucediendo y obtener, no solo XamlParseException, sino también la excepción interna que debería ayudarlo a determinar la raíz del problema. Aquí hay un ejemplo:

 namespace WpfApplication1 { ///  /// Interaction logic for App.xaml ///  public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { // hook on error before app really starts AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); base.OnStartup(e); } void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { // put your tracing or logging code here (I put a message box as an example) MessageBox.Show(e.ExceptionObject.ToString()); } } } 

Para empezar, en realidad tendrías mejor suerte si creaste VS2010 … pero en realidad apunta a una versión más baja de .Net (3.5, o incluso 2.0).

Definitivamente sería útil si publica un poco de código.

Asegúrese de haber copiado todos los archivos necesarios para su aplicación (app.config, etc.).

Este enlace suena similar:

El progtwig .NET 4 escrito / comstackdo en la máquina con Windows 7 no se ejecutará en XP

Y apunta a estos excelentes consejos para la resolución de problemas:

Uso de Fusion Log Viewer

Puede depurar remotamente. Básicamente, esto se hace instalando el servidor de depuración remota en la máquina de destino, y luego se conecta a él desde su estudio visual cuando se inicia la aplicación. Puede encontrar más información aquí: http://msdn.microsoft.com/en-us/library/bt727f1t.aspx y aquí hay un tutorial un tanto antiguo: http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html

Tenga en cuenta que debe implementar con símbolos de depuración (pdbs) y el software depurado debe estar en la misma versión en la que se encuentra su código.

Aunque estaba apuntando .NET 3.5 su cliente hat .NET 4 instalado y lo usó. La cuerda

 Framework Version: v4.0.30319 

me dice esto Para obligar a su cliente a usar .NET 3.5, debe agregar un App.config a su aplicación y agregar:

      

Es posible que reciba una excepción porque .NET 4 trata su XAML de una manera diferente. ¿Intentó que su aplicación se ejecutara bajo .NET 4? Si no tiene ningún App.config suministrado, ha probado su aplicación con .NET Framework 4 de todos modos, aunque ha diseñado .NET Framework 3.5. Si su cliente es lo suficientemente amable, puede dejar que cree un archivo de volcado para que tenga una manera fácil de depurarlo directamente. Descargue Procdump del paquete de herramientas SysInternals y envíelo junto con su aplicación a su cliente. El deja que lo ejecute

 procdump -ma -e -t -x foo.exe %temp%\dump.dmp 

Esto generará un volcado de proceso completo para cada excepción no controlada y otra cuando el proceso termina en el directorio% TEMP%. Visual Studio 2010 ha mejorado mucho el soporte de análisis de vuelco, por lo que debería poder analizarlo en Visual Studio 2010. Si eso no ayuda, puede descargar Windbg (32 bits aquí ), cargar el volcado y escribir

! analizar -v

para ver cuál fue la última excepción. Eso debería hacer el truco. Puede haber problemas con las extensiones administradas para cargar el dll de depuración correcto (sos.dll para .NET 2,3,3.5 y clr.dll para .NET 4), pero hay muchos tutoriales en línea sobre cómo hacerlo. Además de esto, recomendaría agregar manejadores de excepciones en su aplicación para que obtenga un buen archivo de registro cuando su aplicación finalice de manera inesperada.

Si la salida no condujo a la stack correcta, debe usar! ClrStack y! Subprocesos para averiguar qué subprocesos tienen excepciones en su stack.

Por lo general, lo que hago es poner archivos de registro entre procesos para conocer el flujo de mi progtwig.

Si se trata de una aplicación de consola, coloque Console.WriteLine (algunas cadenas) y luego puede poner Console.ReadLine () al final para pausar la ejecución de su progtwig.

Encontré un problema similar recientemente. El problema que tenía era en Windows 7, estaba usando .ico (archivos de icons). Pero no hay soporte para estos en XP. En su aplicación, si está utilizando algún archivo de icons, intente eliminarlos … vea si esto resuelve el problema.

Comience a comentar líneas de código y clases / métodos enteros desde su código hasta que lo ponga en funcionamiento (o comience comentando todo). Luego, lentamente, comience a introducir líneas de código y llamadas de método, etc. hasta que se rompa. Esto debería darle una idea de cualquier código / clase o referencia particular que está causando el problema. Este es sin duda un método tedioso, pero al mismo tiempo, bastante mecánico y en una hora más o menos debe tener una idea bastante buena del culpable.

Escuché que algunos códigos comentados afectaron la ejecución del archivo de salida al comportamiento, algo así como sucedió con tu aplicación. (Especialmente en VS 2010 no en otra versión anterior) pero en el otro lado, el año pasado estaba trabajando en un progtwig en el que utilicé el Suite Dev Component. como usted sabe, su crack simplemente funciona en .Net Framework 3.5 y mi plataforma de progtwig era .Net Framework. 4. Algo sucedió para su aplicación, sucedió en mi aplicación. Tuve que bajar mi plataforma a 3.5 y funciona bien. Puede ser esta información personal. la experiencia te ayuda amigo

Quiero decir algo más, esto algunos errores no dependen de la architecture de la CPU. No te preocupes por eso.

buena suerte. Ali Foroughi

La línea relacionada con “TryCathcWhen” me hace pensar en alguna excepción no controlada al inicio, o se lanza una excepción en un bloque catch al inicio.

Ver su código de inicio sería útil.

He visto esto suceder en máquinas donde la instalación de .NET 3.5 / 4 falló / no se completó con éxito. Sin embargo, esto también es muy poco probable.

Debe intentar instalar la depuración remota en la máquina (proceso bastante fácil) y luego configurar la máquina remota como el objective en Visual Studio, ejecutar el progtwig en modo de depuración. El progtwig se iniciará en la máquina remota y obtendrá el error completo dentro de Visual Studio.

Tenía una aplicación .Net 2.0 que funcionaba con la depuración pero no en una comstackción de lanzamiento (después de la instalación). No obtuve ningún registro de mi aplicación directamente, mis errores vinieron directamente de .NET. El problema era que había creado mi propia clase de progtwig con un vacío estático MAIN () dentro del principal. Tenía un try...catch..finally bloque try...catch..finally . Por alguna razón, .NET se estaba ahogando en el finally . ¿Tienes algo así en tu progtwig?

Este es realmente un error genérico. En mi caso, la aplicación recién instalada no pudo crear su propio origen de eventos debido a permisos insuficientes. Resuelto (uno feo) ejecutando la aplicación una vez en el modo “como administrador”. Asegúrese de que se manejen todas las excepciones internas. Los eventos también son una buena fuente de información.

En mi caso, el problema se solucionó cuando el usuario instaló la misma versión .Net FW para la que estaba desarrollando. (Tengo FW 4.5.1 y el usuario tenía FW 4.0).

Por lo tanto, compruebe la versión de FW:

http://msdn.microsoft.com/library/hh925568(v=vs.110).aspx

E instale exactamente lo mismo antes de volver a intentar ejecutar