为了能够调查为我的一个应用程序报告的问题,我需要知道我的应用程序在用户端运行的(运行时)环境。除了应用程序的版本和操作系统的版本,我还想向用户显示.NET CLR版本和(如果可能).NET Framework版本,以便用户可以将这些信息报告给我。
我发现了几种用于检测已安装的 .NET Framework的解决方案,但这不是我所需要的。
我不在乎(一开始)用户计算机上还安装了什么其他软件。根据定义,实际上未用于运行我的应用程序的.NET Framework安装是其他软件,而不是相关软件。
为了满足CLR版本要求,我发现Environment.Version.ToString()它很有用。
但是,阅读文档会使我感到焦虑。Environment.Version文档的 “ 备注”部分指出,
对于.NET Framework 4.5及更高版本,我们不建议使用Version属性来检测运行时的版本[...]
我了解API之类的CLR,了解诸如组件和可以更新的实际逻辑之类的Framework。因此,知道CLR版本是一个好的开始,但是也可能需要Framework版本,因为它可能指出由于实际Framework(逻辑)中的错误而导致的不兼容性。我的应用程序中的错误可能是框架中的错误导致的,因此我的应用程序中没有错误(但可能存在解决方法)。这样可以大大加快调试过程。
Environment.Version考虑到有关这些注意事项,对于在.NET Framework 4.0版至4.7.2版之间运行的应用程序,我可以安全地使用哪些版本的CLR?
有什么方法可以检测用于运行应用程序的.NET Framework版本(组件和逻辑)?也许通过反映加载的程序集并从特定程序集获取程序集版本,但是这种方法可靠吗?
根据有关文件版本控制的评论,您可以执行以下操作:
var strType = typeof(System.String);
var assemblyUri = strType.Assembly.CodeBase;
var versionInfo = FileVersionInfo.GetVersionInfo(new Uri(assemblyUri).LocalPath);
Run Code Online (Sandbox Code Playgroud)
这将为您FileVersionInfo提供包含当前运行时的 System.String 类型的程序集,这对我来说似乎相当明确。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |