如何从.net中检查.net/mono版本

如何从.net中检查.net/mono版本,.net,.net,我有一个在MS实现和Mono下运行的.net应用程序。它需要.NET4.5,也不会在旧版本的Mono上运行(例如,它在3.8.0下被破坏,而3.10.0是可以的) 我认为检查应用程序是否可以运行的一个好方法是编写一小段可以链接到.NET2.0库的代码,并在那里进行检查。这样很容易确定Mono版本,并且我可以在主应用程序中重复使用相同的代码作为安全检查(尽管它可能无法执行该代码-例如,应用程序在.net 4.0下只是存在,没有说明任何内容) 我遇到的问题是,在用于执行测试代码的任何运行时下,都会找

我有一个在MS实现和Mono下运行的.net应用程序。它需要.NET4.5,也不会在旧版本的Mono上运行(例如,它在3.8.0下被破坏,而3.10.0是可以的)

我认为检查应用程序是否可以运行的一个好方法是编写一小段可以链接到.NET2.0库的代码,并在那里进行检查。这样很容易确定Mono版本,并且我可以在主应用程序中重复使用相同的代码作为安全检查(尽管它可能无法执行该代码-例如,应用程序在.net 4.0下只是存在,没有说明任何内容)


我遇到的问题是,在用于执行测试代码的任何运行时下,都会找到受支持的.net的最高版本,而不是它链接到的任何版本(似乎是System.Environment.version返回的版本)。我可以通过使用反射执行Mono.Runtime.GetDisplayName来获得Mono的版本。也许有一些(类似的?)解决方案可以在Windows中的Windows.net下工作?

确定已安装的.net framework版本的最可靠方法是使用注册表。需要检查的子项是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\
请查看此链接,获取在C#中正确读取这些值的代码示例:

在Mono中,确定版本最可靠的方法可能是运行shell命令:

mono --version

我想你可以用
进程运行它
类并解析输出。

非常感谢MS文档的链接。(调用mono并不容易,因为它需要知道可执行文件来自何处。但是我提到的基于反射的方法对我很有效。)那么这是回答你的问题,还是你需要其他建议?