我有一个在MS实现和Mono下运行的.net应用程序。它需要.net 4.5,也不会在旧版本的Mono上运行(例如它在3.8.0下打破,而3.10.0很好)。
我认为检查应用程序是否可以运行的一种好方法是编写一小段可以链接.net 2.0库的代码,并在那里进行检查。这样就可以很容易地确定Mono版本,并且我可以在主应用程序中重复使用相同的代码作为安全检查(虽然它可能无法执行该代码 - 例如应用程序只是存在而不会说任何东西。净4.0)。
我遇到的问题是找到在用于执行测试代码的任何运行时支持的.net的最高版本,而不是与其链接的任何版本(这似乎是System.Environment.Version)回报)。我可以通过使用反射来执行Mono.Runtime.GetDisplayName来获取Mono的版本。也许有一些(类似?)解决方案可以在Windows .net下运行。
答案 0 :(得分:1)
在Windows中,确定已安装的.NET框架版本的最可靠方法是使用注册表。您需要检查的子项是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\
查看此链接以获取在C#中正确读取这些值的代码示例:
http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx
在Mono中,确定版本的最可靠方法可能是运行shell命令:
mono --version
我猜你可以用Process
类运行它并解析输出。