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

时间:2016-02-25 19:18:37

标签: c# wpf visual-studio-2013

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

我不知道要显示哪些代码段,因为我不知道是什么导致了这个问题。如果您希望看到某些功能/文件在评论中告诉我,如果可以,我会将它们添加到帖子中。

你知道是什么导致这种情况发生吗?我需要采取哪些步骤来运行.vshost.exe运行调试器的方式运行我的.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运行而不会崩溃

2 个答案:

答案 0 :(得分:2)

要开始缩小问题的原因,您可以放入应用程序级异常处理程序并使用异常信息弹出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等将堆栈跟踪到文本文件。您不必在调试模式下运行应用程序,因此您和#39;能够看到导致该环境出现问题的原因。如果您需要更多帮助来解决问题,请随意发布异常信息。

答案 1 :(得分:0)

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