23

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. System.Deployment.dll 追加情報: アプリケーション ID が設定されていません。

このアプリケーションのコントロールを別の 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 Framework は、その例外を内部的にスローおよびキャッチしています。デバッガーは、.NET の一部のコードで例外が発生したことを通知しますSystem.Deployment.dll。ユーザー/ネットワーク情報にアクセスしようとすると例外が発生しますが、基になるコードは発生時に例外をキャッチし、自動的に実行を再開します。それに対してできることは何もなく、比較的無害です。

ほとんどの場合、現在のユーザーの AppData パスを取得しようとしています。この場合、フレームワークは、正しいパスを返すために、アプリケーションが通常のアプリか ClickOnce アプリかを判断する必要があります。ClickOnce アプリの場合は、正しいデータが返されるだけです。それ以外の場合、例外がスローされ、フレームワークによってキャッチされ、アプリケーションがClickOnce アプリではないと想定され、代わりに標準のユーザー パスが返されます。

アプリケーションの実行中にスローされ、処理される多くの例外があります。取り除かなければ害はありません。これが本当に気になる場合は、デバッガーが通知する例外をカスタマイズできます。例えば:

  1. [デバッグ] メニューから [例外] ウィンドウを開きます。
  2. 「共通言語ランタイム例外」->「System.Deployment.Application」を展開します。
  3. 「System.Deployment.Application.InvalidDeploymentException」の横にあるチェックボックスをオフにします。
于 2011-01-13T07:58:27.220 に答える