23

我开发了一个 WPF 应用程序,当我在调试模式下启动它时,我在输出中看到以下内容:

“WpfApplication1.vshost.exe”(托管 (v2.0.50727)):已加载“C:\WINDOWS\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll”,已加载符号。System.Deployment.dll 中出现“System.Deployment.Application.InvalidDeploymentException”类型的第一次机会异常附加信息:未设置应用程序标识。

如果我在另一个 WPF 应用程序中使用此应用程序中的控件,则输出中有 7 条此类消息。尽管如此,该应用程序工作正常。

你能解释一下抛出这些异常的原因吗?我发现该方法ApplicationDeployment.get_CurrentDeployment提高了它们。在 MSDN 中写道,当“您试图从非 ClickOnce 应用程序调用此静态属性”时会出现此异常。我不明白这是什么意思。

我发现了类似的帖子InvalidDeploymentException - Application identity is not set but there is no answer to this question。

4

1 回答 1

45

这是“第一次机会异常”,这意味着调试器只是通知您抛出了异常,而不是未处理的异常。

.NET 框架在内部抛出并捕获该异常——调试器告诉您它发生在System.Deployment.dll. 当尝试访问用户/网络信息时会引发异常,但底层代码会在异常发生时捕获异常并自动恢复执行。您对此无能为力,而且它相对无害。

您很可能尝试检索当前用户的 AppData 路径,在这种情况下,框架需要确定您的应用程序是普通应用程序还是 ClickOnce 应用程序,以便返回正确的路径。如果您是 ClickOnce 应用程序,则只会返回正确的数据。否则,将引发异常,该异常被框架捕获,并假设您的应用程序不是ClickOnce 应用程序,从而导致返回标准用户路径。

应用程序运行时会引发和处理许多异常。除非它们未经处理,否则没有任何害处。如果这确实让您感到困扰,您可以自定义调试器通知您的异常。例如:

  1. 从“调试”菜单打开“异常”窗口。
  2. 展开“公共语言运行时异常”->“System.Deployment.Application”。
  3. 取消选中“System.Deployment.Application.InvalidDeploymentException”旁边的框。
于 2011-01-13T07:58:27.220 回答