使用我的计算机上安装的每个.NET版本获取程序列表

时间:2010-09-18 16:03:23

标签: .net installation

这不是一个迫切的需要,而是我心中有一段时间的好奇心。对于我机器上安装的每个.NET框架版本,我想列出需要它的已安装应用程序。有了这个,我可以知道我是否可以安全地删除早期的框架版本,而不会导致任何程序失败。有没有这样的实用工具?我有点怀疑它,所以作为一个接近的秒我将采取如何在C#中编码的建议。

示例输出:

.NET 1.1 required by:
    ProgramX, ProgramY, ...
.NET 2.0 required by:
    ProgramA, ProgramB, ProgramC, ...
.NET 3.0 required by:
    ...
.NET 3.5 required by:
    ...
.NET 4.0 required by:
    ...

2 个答案:

答案 0 :(得分:1)

只是对所需内容的一些指示,我怀疑当你发现它需要的时候你会追求它。

起点是编写枚举磁盘驱动器上所有EXE和DLL文件的代码。对于您找到的每个文件,首先必须检查它是否确实是托管程序。接下来,您需要从COR标头中提取元数据版本号。它表示构建可执行文件的CLR版本。 .NET 2.0的常见值为2.0.50727,.NET 4.0为3.0和3.5,4.0.30319,我不知道.NET 1.x的数字

接下来,您需要使用Assembly.GetReferencedAssemblies()来找出它依赖的.NET程序集。您需要构建自己的2.0,3.0,3.5及其Service Pack中存在的程序集索引。这可以让您找出所需的特定版本。

接下来,您需要解析可能存在于EXE中的任何.config文件,并检查<requiredRuntime><supportedRuntime>元素。后一个属性是棘手的,因为它可以出现不止一次。

我可能会忽略一些事情,例如发布商程序集和bindingRedirects。使用SSCLI20中ildasm.exe的源代码来解读元数据版本号。这种工具的胜利很小。今天售价100美元的1TB硬盘,这种工具的潜在节省价值约为4美分。

答案 1 :(得分:0)

由于使用.NET 1.1的应用程序可以在.NET 2.0,3,0,3.5和.NET 4.0上运行(通常,使用较低.NET版本的应用程序可以在更高的.NET版本上运行),您的任务可能不会没有多大意义。