Что вызывает InvalidDeploymentException в приложении WPF? - PullRequest
19 голосов
/ 13 января 2011

Я разработал приложение 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 - Идентификатор приложения не установлен , но нет ответа на этот вопрос.

1 Ответ

41 голосов
/ 13 января 2011

Это «исключение первого шанса», что означает, что отладчик просто уведомляет вас о том, что исключение было выдано, а не обработано.

.NET Framework внутренне создает и перехватывает это исключение - отладчик сообщает вам, что это происходит в некотором коде в System.Deployment.dll. Исключение возникает, когда делается попытка получить доступ к пользовательской / сетевой информации, но базовый код перехватывает исключение при его возникновении и автоматически возобновляет выполнение. Вы ничего не можете с этим поделать, и это относительно безопасно.

Скорее всего, вы пытаетесь получить путь AppData для текущего пользователя, и в этом случае Framework должен определить, является ли ваше приложение обычным приложением или приложением ClickOnce, чтобы вернуть правильный путь. Если вы приложение ClickOnce, правильные данные просто возвращаются. В противном случае выдается исключение, которое перехватывается платформой Framework и делается предположение, что ваше приложение не является приложением ClickOnce, в результате чего вместо него возвращается стандартный путь пользователя.

Существует ряд исключений, которые генерируются и обрабатываются во время работы приложения. Там нет никакого вреда, если они не обрабатываются. Если это действительно вас беспокоит, вы можете настроить исключения, о которых вам сообщает отладчик. Например:

  1. Откройте окно «Исключения» в меню «Отладка».
  2. Разверните "Общие исключения времени выполнения языка" -> "System.Deployment.Application".
  3. Снимите флажок рядом с «System.Deployment.Application.InvalidDeploymentException».
...