首页 > 解决方案 > Windows 事件日志中引用的“框架版本”是什么?

问题描述

我正在调试 C# 应用程序崩溃。崩溃发生在对外部本地 DLL 的调用中。

Windows 事件日志包含以下报告。我的目标是.NET 4.5(在 Visual Studio 中)并且目标 PC 安装了.NET 4.5.2

我的问题是:为什么 Framework Version 指示v4.0.30319?在我看来,应用程序运行在错误的 .NET 框架下。

Application: XXXXXXX.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at XXXXXXX.SVcamApi+NativeMethods.SVInterfaceGetDeviceId_64(Void*, UInt32, SByte*, UInt32*)
   at XXXXXXX.SVcamApi+NativeMethods.SVInterfaceGetDeviceId_64(Void*, UInt32, SByte*, UInt32*)
   at XXXXXXX.SVcamApi.SVS_InterfaceGetDeviceId(IntPtr, UInt32, System.String ByRef, UInt32 ByRef)
   at XXXXXXX.XXXXXXX+Cameracontainer.deviceDiscovery()
   at XXXXXXX.XXXXXXX.buttonDiscover_Click(System.Object, System.EventArgs)
   at XXXXXXX.XXXXXXX.DiscoverAndConnect()
   at XXXXXXX.XXXXXXX..ctor()
   at XXXXXXX.Program.Main()

我已经确认使用 Raymondcc .NET Detector 实用程序安装了 4.5.2: https ://www.raymond.cc/blog/how-to-check-what-version-of-microsoft-net-framework-is-安装在计算机/

令人惊讶的是,.NET 检测器表明甚至没有安装 4.0。它显示已安装的 2、3、3.5 和 4.5.2。

标签: .netwindows-error-reporting

解决方案


您看到的是 CLR 的版本,即Common Language Runtime。自 4.0 以来的每个 .NET 版本都在 CLR 的 4.0.30319 版本上运行,因此即使对于 .NET 4.5.2 应用程序,看到该数字也是正常的。

clr 的版本在框架之间确实会发生变化,只是版本号的差异更大。例如 .NET 4.0 在 CLR 4.0.30319.0 到 4.0.30319.17000 上运行,.NET 4.5 在 CLR 4.0.30319.17001 到 4.0.3019.18400 上运行等(来源


推荐阅读