我开发了一个WPF应用程序,当我在调试模式下启动它时,我在输出中看到以下内容:
'WpfApplication1.vshost.exe'(管理 (v2.0.50727)):已加载 'C:\ Windows \组件\ GAC_MSIL \ System.Deployment \ 2.0.0.0__b03f5f7f11d50a3a \ System.Deployment.dll', 符号已加载。第一次机会 类型例外 'System.Deployment.Application.InvalidDeploymentException' 发生在System.Deployment.dll中 附加信息:申请 身份没有设定。
如果我在另一个WPF应用程序中使用此应用程序中的控件,则输出中会有7条此类消息。不过,该应用程序运行正常。
你能解释一下抛出这些异常的原因吗?我发现方法ApplicationDeployment.get_CurrentDeployment
引发了它们。在MSDN中写道,当您“试图从非ClickOnce应用程序调用此静态属性时”出现此异常。我无法理解它的含义。
我找到了类似的帖子InvalidDeploymentException - Application identity is not set,但这个问题没有答案。
答案 0 :(得分:40)
这是一个“第一次机会异常”,这意味着调试器只是通知您抛出了异常,而不是那个未处理的异常。
.NET Framework在内部抛出并捕获该异常 - 调试器告诉您它出现在System.Deployment.dll
中的某些代码中。尝试访问用户/网络信息时会引发异常,但底层代码在异常发生时捕获异常并自动恢复执行。你无能为力,它相对无害。
您最有可能尝试检索当前用户的AppData路径,在这种情况下,Framework需要确定您的应用程序是普通应用程序还是ClickOnce应用程序才能返回正确的路径。如果您是ClickOnce应用程序,则只返回正确的数据。否则,抛出异常,该异常被框架捕获,并假设您的应用程序不是ClickOnce应用程序,导致返回标准用户路径。
在应用程序运行时会抛出并处理许多异常。除非他们没有得到处理,否则没有坏处。如果这确实让您感到烦恼,您可以自定义调试器通知您的异常。例如: