現在、.NET Framework 3.5を対象とする既存のアプリケーションを開発中です。新しいバージョンでは、アプリケーションは.NET 4.5で実行する必要があります。テストのために、.NET Framework 4.5を使用するようにプロジェクトをアップグレードしました。TargetFrameworkVersionを3.5から4.5にアップグレードした後のユーザー未処理の例外
まず、すべてが正しく動作しているようでした。アプリケーション(WinForm)は期待どおりに実行されました。実行ファイルを直接起動すると何も起こりません。すべてが正しく動作するようです。しかし、Visual Studioのデバッグでアプリケーションを起動すると、.NET Framework 3.5ではコードでは多くのNullReferenceExceptionsがスローされます。
public string ConsistencyContextKey
{
get { return Container.ConsistencyCheckRuleCo.ContextKey; }
}
ConsistencyCheckRuleCo
プロパティ例外場合にヌルである次のよう
罹患スニペットがあります。
プロパティの呼び出しは、リフレクションによるものです。 .NET 3.5では、呼び出しはSystem.ComponentModel.ReflectPropertyDescriptor.GetValue(object)
から行われます。 参照コールスタック:4.5でこの方法が変更され、現在の方法[System.SecurityUtils.MethodInfoInvoke(MethodInfo, object, object[])]
に渡す
。 参照コールスタック:プロパティの両方の最後に
はmethod.invoke()
経由で呼び出されます。
SecurityUtils.MethodInfoInvoke
のソースは、hereとです。
私はそれが4.6.1のソースだと知っていますが、何も変更されておらず、4.5では同じです。
謎のことは、ReflectPropertyDescriptor
には、3.5と4.5にもTry-Catchがあります。だから、なぜコードが私の財産に来るときに、ユーザーが未処理の例外があるとVisual Studioは言うのですか?
プロパティはpublicです。はではなく、タイプが表示されます。
WinRTをサポートするために4.5で大幅に変更されました。これはこれとは関係ありません。例外がスローされた場合にデバッガが停止するように要求していないことを確認してください。デバッグ>例外ダイアログ。 –
Visual Sudioがuser-unhandeld Exceptionと言う理由を理解していません。コールのベースとなるReflectPropertyDescriptor.GetValue()には、Try-Catch-Blockがあります。 –