.NET应用程序无法启动并收到XamlParseException

我写了一个应用程序,可以安装和使用我的开发PC(一个Window 7)。

  • 开发环境:Window 7,VS2010安装了.NET 4.NET 3.5的 WPF C#
  • 在其他客户端计算机上(XP SP3,2和1),它安装时没有错误,但无法启动。 在任务管理器中,我可以看到应用程序在自己关闭之前暂时占用内存。

    我已经通过以下方式确保了我的开发PC和各种客户端XP机器上的.NET 3.5一致性:

  • 该应用程序的目标是.NET 3.5 (或3.5客户端配置文件
  • 使用VS2010安装程序进行部署:在启动条件中以.NET 3.5为目标
  • 在调试应用程序和安装程序项目期间,不会出现有关.NET兼容性的任何错误
  • eventvwr发现了以下警告:

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

    有这个XamlParseException导致我的应用程序无法在XP Window Machine上启动。 到底是怎么回事?


    XamlParseException是在应用程序启动时出现问题时发生的通用错误。 我建议你修改你的应用程序启动代码来追踪真正发生的事情,并且获取,不仅是XamlParseException,还有内部异常,这些异常可以帮助你确定问题的根源。 这里是一个例子:

    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());
            }
        }
    }
    

    对于初学者来说,如果你在VS2010上构建的话,实际上你会有更好的运气..但是实际上针对的是较低版本的.Net(3.5,甚至2.0)。

    如果你发布了一些代码,它肯定会有帮助。

    确保你已经复制了你的应用程序的所有必要文件(app.config等)。

    这个链接听起来类似:

    在Windows 7机器上编写/编译的.NET 4程序不能在XP上运行

    它指向这些优秀的故障排除提示:

    使用Fusion Log Viewer


    您可以远程调试。 基本上这是通过在目标机器上安装远程调试服务器完成的,然后在启动应用程序时从视觉工作室连接到它。 一些更多的信息可以在这里找到:http://msdn.microsoft.com/en-us/library/bt727f1t.aspx这里有一个有点老人的教程:http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html

    请注意,您必须使用调试符号(pdbs)进行部署,并且调试的软件必须与您的代码所在的版本相同。

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

    上一篇: .NET application cannot start and receive XamlParseException

    下一篇: How to set caret/cursor position in a contenteditable div between two divs.