这个问题与其说与编程有关,不如说与部署有关.

我发现自己与公司的团队进行了大量交谈,他们的工作是维护我们的Windows生产服务器,并在其上部署我们的代码.出于法律和法规遵从性原因,我对服务器没有直接的可见性或任何控制权,因此我只能知道服务器的版本.NET安装在其中任何一个上都是通过我给那个群体的指示.

到目前为止,我能想到的判断安装了哪些版本的所有方法(判断与1.1或2.0匹配的管理工具,判断"添加/删除程序"列表中的条目,判断c:\Windows\Microsoft.NET下是否存在目录)都是有缺陷的(我看到至少有一台机器在"管理工具"下有2.0条目,但该方法没有告诉您关于3.0+的任何信息,"添加/删除程序"列表可能与实际情况不同步,目录的存在不一定

考虑到我通常需要提前知道这些事情已经就绪(我发现"哎呀,这个没有您需要的所有版本和Service Pack"在短的维护窗口内不能很好地工作),而且我必须"通过代理"进行判断,因为我不能直接访问服务器,那么如何才能万无一失地告诉生产Windows Server上安装了哪些版本的.NET呢?".最好是使用框架安装的某些固有方式来完成此操作,因为这样会更快,并且不需要加载某种实用程序,而且如果框架没有正确安装但仍有文件(即,有一个目录和gacutil.exe在那里,但该版本的框架并未真正"安装"),则该方法肯定会失败.

EDIT:如果没有一个好的内置到框架中的万无一失的内在方法来做到这一点,有谁知道有一个好的、轻量级的、不需要安装的程序可以发现这一点呢?我可以想象有人可以很容易地写一个,但如果已经有了,那就更好了.

推荐答案

你应该在你正在寻找这些信息的服务器上打开IE,然后访问这个网站:http://www.hanselman.com/smallestdotnet/

就这些.

该网站有一个脚本,可以查看浏览器的"用户代理",并找出该代理的版本(如果有的话).NET Framework,并自动显示(如果 Select 下载.NET Framework,则计算总大小).

.net相关问答推荐

无法在Ubuntu 22.04.3上运行带有Rider 2023和DotNet-8.0的项目

Azure Function应用程序-如何升级.NET运行时

dotnet ef dbcontext scaffold command --data-annotations 或 -d 命令行参数似乎不起作用

如何计算给定2个字符串的距离相似性度量?

xunit Assert.ThrowsAsync() 不能正常工作?

在 Moq 中模拟泛型方法而不指定 T

发布版本中的 Debug.WriteLine

一种消耗(所有字节)BinaryReader 的优雅方式?

使用泛型装箱和拆箱

哪个单元测试框架?

如何将自定义 UserControl 显示为对话框?

测试没有预期的异常

如何将 XPath 与 XElement 或 LINQ 一起使用?

如何确定字符串是 C# 中的有效 IPv4 还是 IPv6 地址?

如何从文件中删除单个属性(例如只读)?

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

是否可以判断对象是否已附加到实体框架中的数据上下文?

找不到 System.Windows.Media 命名空间?

ConfigurationManager.AppSettings - 如何修改和保存?

判断数据表中是否包含空值的最佳方法