【问题标题】:What causes an InvalidDeploymentException in a WPF application?是什么导致 WPF 应用程序中出现 InvalidDeploymentException?
【发布时间】:2011-06-08 08:16:03
【问题描述】:

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

'WpfApplication1.vshost.exe'(托管 (v2.0.50727)):已加载 'C:\WINDOWS\assembly\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,但这个问题没有答案。

【问题讨论】:

    标签: .net wpf exception swallowed-exceptions


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 好的,如何检查我的应用程序 ClickOnce 还是正常的,如果正常,设置在正确的路径中?
    • @Kirill:如果我的回答不清楚,我深表歉意。我是说.NET 框架在内部 完成所有这些工作。这不是您正在做的事情,甚至不是您可以控制的事情。这就是它如何确定您的应用程序是 ClickOnce 还是正常的。你不能自己设置。请记住,.NET Framework 是一个巨大的代码库,它与您自己的代码一起运行以处理较低级别的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-02-12
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多