什么导致WPF应用程序出现InvalidDeploymentException异常?

25
我开发了一个WPF应用程序,当我在调试模式下启动它时,我在输出中看到以下内容:
'WpfApplication1.vshost.exe' (Managed (v2.0.50727)): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll', Symbols loaded. A first chance exception of type 'System.Deployment.Application.InvalidDeploymentException' occurred in System.Deployment.dll Additional information: Application identity is not set.
如果我在另一个WPF应用程序中使用此应用程序的控件,则输出中会出现7条这样的消息。尽管如此,该应用程序仍然可以正常工作。
您能解释一下为什么会抛出这些异常吗?我发现方法ApplicationDeployment.get_CurrentDeployment会引发它们。在MSDN中写道,当“您尝试从非ClickOnce应用程序调用此静态属性”时,就会出现此异常。我不明白这是什么意思。
我找到了类似的帖子InvalidDeploymentException - Application identity is not set,但没有回答这个问题。
1个回答

47

这是一个“第一次机会例外”,也就是说调试器只是通知你发生了一个异常,而不是未处理异常。

.NET Framework 内部抛出和捕获该异常 - 调试器告诉你它发生在 System.Deployment.dll 中的某些代码中。当企图访问用户 / 网络信息时引发该异常,但基础代码在其发生时捕获异常并自动恢复执行。你无法对此做任何事情,它相对无害。

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

在应用程序运行时,会抛出和处理许多异常。除非未处理,否则没有危害。如果这真的困扰你,可以自定义调试器提醒你的异常。例如:

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

好的,我该如何检查我的应用程序是ClickOnce还是普通应用程序?如果它是普通应用程序,如何设置正确的路径? - Kirill Lykov
2
@Kirill:如果我的回答不够清晰,我向你道歉。我的意思是,.NET Framework 内部 执行所有这些操作。这不是你在做什么,甚至你也无法控制。这只是它确定你的应用程序是 ClickOnce 还是普通应用程序的方式。你不能自己设置它。请记住,.NET Framework 是一个巨大的代码库,与你自己的代码一起运行,处理更低级别的功能。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接