这个问题与其说与编程有关,不如说与部署有关.
我发现自己与公司的团队进行了大量交谈,他们的工作是维护我们的Windows生产服务器,并在其上部署我们的代码.出于法律和法规遵从性原因,我对服务器没有直接的可见性或任何控制权,因此我只能知道服务器的版本.NET安装在其中任何一个上都是通过我给那个群体的指示.
到目前为止,我能想到的判断安装了哪些版本的所有方法(判断与1.1或2.0匹配的管理工具,判断"添加/删除程序"列表中的条目,判断c:\Windows\Microsoft.NET下是否存在目录)都是有缺陷的(我看到至少有一台机器在"管理工具"下有2.0条目,但该方法没有告诉您关于3.0+的任何信息,"添加/删除程序"列表可能与实际情况不同步,目录的存在不一定
考虑到我通常需要提前知道这些事情已经就绪(我发现"哎呀,这个没有您需要的所有版本和Service Pack"在短的维护窗口内不能很好地工作),而且我必须"通过代理"进行判断,因为我不能直接访问服务器,那么如何才能万无一失地告诉生产Windows Server上安装了哪些版本的.NET呢?".最好是使用框架安装的某些固有方式来完成此操作,因为这样会更快,并且不需要加载某种实用程序,而且如果框架没有正确安装但仍有文件(即,有一个目录和gacutil.exe在那里,但该版本的框架并未真正"安装"),则该方法肯定会失败.
EDIT:如果没有一个好的内置到框架中的万无一失的内在方法来做到这一点,有谁知道有一个好的、轻量级的、不需要安装的程序可以发现这一点呢?我可以想象有人可以很容易地写一个,但如果已经有了,那就更好了.