是什么导致WPF应用程序中的InvalidDeploymentException?

Kir*_*kov 21 .net wpf exception swallowed-exceptions

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

'WpfApplication1.vshost.exe'(Managed(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 - 没有设置应用程序标识但是没有这个问题的答案.

Cod*_*ray 43

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

.NET Framework在内部抛出并捕获该异常 - 调试器告诉您它出现在某些代码中System.Deployment.dll.尝试访问用户/网络信息时会引发异常,但底层代码在异常发生时捕获异常并自动恢复执行.你无能为力,它相对无害.

您很可能正在尝试检索当前用户的AppData路径,在这种情况下,Framework需要确定您的应用程序是普通应用程序还是ClickOnce应用程序才能返回正确的路径.如果您是ClickOnce应用程序,则只返回正确的数据.否则,抛出一个异常,该异常被框架捕获,并假设您的应用程序不是 ClickOnce应用程序,导致返回标准用户路径.

在应用程序运行时会抛出并处理许多异常.除非他们没有得到处理,否则没有坏处.如果这确实让您感到烦恼,您可以自定义调试器通知您的异常.例如:

  1. 从"调试"菜单中打开"例外"窗口.
  2. 展开"公共语言运行时异常" - >"System.Deployment.Application".
  3. 取消选中"System.Deployment.Application.InvalidDeploymentException"旁边的框.

  • @Kirill:抱歉,如果我的答案不清楚。我是说.NET Framework内部完成所有这些工作。这不是您正在做的事情,或者您没有任何控制权。这就是它确定您的应用程序是ClickOnce还是普通应用程序的简单方式。您不能自己设置。请记住,.NET Framework是一个庞大的代码库,它与您自己的代码一起运行以处理较低级别的功能。 (2认同)