Windows 事件日志中引用的 "Framework Version" 是什么?
What is the "Framework Version" referenced in Windows Event Logs?
我正在调试 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 检测器实用程序安装了 4.5.2:
https://www.raymond.cc/blog/how-to-check-what-version-of-microsoft-net-framework-is-installed-in-computer/
令人惊讶的是,.NET 检测器指示甚至没有安装 4.0;它显示已安装 2、3、3.5 和 4.5.2。
您看到的是 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 上运行,等等 (Source)
我正在调试 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 检测器实用程序安装了 4.5.2: https://www.raymond.cc/blog/how-to-check-what-version-of-microsoft-net-framework-is-installed-in-computer/
令人惊讶的是,.NET 检测器指示甚至没有安装 4.0;它显示已安装 2、3、3.5 和 4.5.2。
您看到的是 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 上运行,等等 (Source)