.NET application cannot start and receive XamlParseException

I wrote an app that can install and work on my development PC (a Window 7).

  • Development Environment: Window 7, VS2010 WPF C# with both .NET 4 and .NET 3.5 installed
  • On other client computer (XP SP3, 2 and 1), it install with no error, but can not start. In task manager, I can see the application takes up memory briefly before closing by itself.

    I had made sure .NET 3.5 consistency across my develop PC and various client XP machines by following:

  • The application targets .NET 3.5 (or 3.5 Client Profile )
  • Use VS2010 Installer for deployment: targets .NET 3.5 in Launch Condition
  • No error whatsoever about .NET compatibility during debug of application and installer project
  • eventvwr caught the following warning:

     ¬º˛¿‡–Õ:   ¥ÌŒÛ
     ¬º˛¿¥‘¥:   .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.<.ctor>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 µƒ∞Ô÷˙∫Õ÷ß≥÷÷––ƒ°£
    

    there was this XamlParseException causing my app to not start on XP Window Machine. What is going on?


    XamlParseException is the generic error that happens when there is a problem at application start. I suggest you modify you application startup code to trace what's really going on and get, not only the XamlParseException, but also the inner exception(s) which should help you determine the root of the problem. Here is an example:

    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for App.xaml
        /// </summary>
        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());
            }
        }
    }
    

    For starters, you'd actually have better luck if you built on VS2010 .. but actually targeted for a lower version of .Net (3.5, or even 2.0).

    It would definitely be helpful if you post a bit of code.

    Make sure you've copied all the necessary files for your application (app.config, etc).

    This link sounds similar:

    .NET 4 Program written/compiled on Windows 7 machine won't run on XP

    And it points to these excellent troubleshooting tips:

    Using Fusion Log Viewer


    You can remote debug. Basically this is done by installing the remote debug server on the target machine, then attach to it from your visual studio when you start the application. Some more info can be found here : http://msdn.microsoft.com/en-us/library/bt727f1t.aspx and there's a somewhat elderly tutorial here : http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html

    Please note that you must deploy with debug symbols (pdbs) and the software debugged must be in the same version that your code is in.

    链接地址: http://www.djcxy.com/p/92486.html

    上一篇: 升级到.Net 4.0后出错

    下一篇: .NET应用程序无法启动并收到XamlParseException