使用调试器运行的 WPF 应用程序,但不能没有调试器

本文关键字:调试器 但不能 应用程序 WPF 运行 | 更新日期: 2023-09-27 18:36:11

所以我有 3 个功能齐全的 WPF 应用程序,它们在 Visual Studio 中的调试器上运行良好。但是,如果没有调试器,三个中的 2 个根本无法运行(即 .exe 不执行任何操作)。它不会崩溃或给我错误,它只是给了我一秒钟的加载轮,然后什么都没有。我不明白为什么它可以很好地与调试器一起运行,而在没有调试器的情况下运行时根本不运行。我已经尝试了调试和发布版本,但没有区别。我尝试重新启动Visual Studio和计算机,并清理和重建解决方案。我提到运行良好的应用程序,因为它使我相信我的视觉工作室运行良好。我正在使用Visual Studio 2013。

我不知道要显示哪些代码片段,因为我不知道可能导致问题的原因。如果您想查看某些功能/文件,请在评论中告诉我,如果可以的话,我会将它们添加到帖子中。

您是否知道可能导致这种情况发生的原因以及我需要采取哪些步骤才能使我的.exe文件以 .vshost.exe 与调试器一起运行的方式运行?

编辑:该应用程序确实抛出了我在事件日志中发现的错误。虽然我仍然不确定导致错误的原因这是错误:

Application: OrderFinderTool.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Windows.Markup.XamlParseException
Stack:
   at System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
   at System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
   at System.Windows.Application.LoadComponent(System.Object, System.Uri)
   at SupportWizard.App.InitializeComponent()
   at SupportWizard.App.Main()

编辑2:我的同事运行了.exe,并收到更详细的错误消息:

Application: OrderFinderTool.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
   at System.Reflection.RuntimeAssembly._nLoad(System.Reflection.AssemblyName, System.String, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, IntPtr, Boolean, Boolean, Boolean)
   at System.Reflection.RuntimeAssembly.nLoad(System.Reflection.AssemblyName, System.String, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, IntPtr, Boolean, Boolean, Boolean)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(System.Reflection.AssemblyName, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, IntPtr, Boolean, Boolean, Boolean)
   at System.Reflection.Assembly.Load(System.Reflection.AssemblyName)
   at System.Windows.Navigation.BaseUriHelper.GetLoadedAssembly(System.String, System.String, System.String)
   at MS.Internal.AppModel.ResourceContainer.GetResourceManagerWrapper(System.Uri, System.String ByRef, Boolean ByRef)
   at MS.Internal.AppModel.ResourceContainer.GetPartCore(System.Uri)
   at System.IO.Packaging.Package.GetPartHelper(System.Uri)
   at System.IO.Packaging.Package.GetPart(System.Uri)
   at System.IO.Packaging.PackWebResponse+CachedResponse.GetResponseStream()
   at System.IO.Packaging.PackWebResponse.GetResponseStream()
   at System.IO.Packaging.PackWebResponse.get_ContentType()
   at MS.Internal.WpfWebRequestHelper.GetContentType(System.Net.WebResponse)
   at MS.Internal.WpfWebRequestHelper.GetResponseStream(System.Net.WebRequest, MS.Internal.ContentType ByRef)
   at System.Windows.ResourceDictionary.set_Source(System.Uri)
   at System.Windows.Baml2006.WpfSharedBamlSchemaContext+<>c.<Create_BamlProperty_ResourceDictionary_Source>b__342_0(System.Object, System.Object)
   at System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(System.Object, System.Object)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(System.Xaml.XamlMember, System.Object, System.Object)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(System.Object, System.Xaml.XamlMember, System.Object)
Exception Info: System.Windows.Markup.XamlParseException
   at System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
   at System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
   at System.Windows.Application.LoadComponent(System.Object, System.Uri)
   at OrderFinderTool.App.InitializeComponent()
   at OrderFinderTool.App.Main()

编辑3:感谢用户 Jay T 的帮助,我发现在使用调试器运行时正在加载 aero 程序集,但并非没有它,因为我在 Windows 8 机器上运行并且他们切换到新的 aero2 程序集。删除程序集及其引用允许.exe运行而不会崩溃

使用调试器运行的 WPF 应用程序,但不能没有调试器

若要开始缩小问题的原因范围,可以放入应用程序级异常处理程序,并弹出包含异常信息的 MessageBox 或将其写出到文件中。在 App.xaml 文件中,为 DispatcherUnhandledExceptption 添加一个处理程序:

<Application x:Class="YourApp"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"             
         StartupUri="MainWindow.xaml"
         DispatcherUnhandledException="Application_DispatcherUnhandledException">
</Application>

然后在 App.xaml 中.cs可以处理事件并访问未处理的异常:

private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
        var exception = e.Exception;
}

在该函数中,您可以在 MessageBox 中显示异常消息,使用 StreamWriter 将其写出并将堆栈跟踪写出到文本文件中等。您不必在调试模式下运行应用程序,因此您将能够看到导致该环境中出现问题的原因。如果您需要更多帮助来解决问题,请随时发布异常信息。

就我而言,我引用了PresentationFramework.Aero. 所以为了修复错误,我为PresentationFramework.AeroPresentationFramework复制本地为真。 之后它起作用了。

相关文章: