我如何找到程序正在使用的mscorlib.dll?

时间:2015-05-22 13:45:57

标签: c# .net

我在计算机上安装了第三方程序。 我在ildasm.exe中打开了这个程序附带的一个.dll,并检查了清单:

.assembly extern mscorlib
{
   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )              // .z\V.4..
   .ver 2:0:0:0
}

因此该程序使用.net 2.0,3.0或3.5。

我在计算机上搜索了mscorlib.dll并找到了61个文件。

如何找到该程序实际使用的这些.dll

我还注意到其中一些是在名为的目录中: C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETPortable \ v4.0 \ Profile \ ProfileXXX \ mscorlib.dll,其中XXX是1-3位数字。

这里发生了什么?我可以理解每个.net版本(2.0,3.0,3.5 ......)将有一个不同的文件,但不应该添加到61个文件。每个配置文件之间有什么区别?

这是.dll地狱问题的.net解决方案是什么样的? 相同文件的大量版本+公钥可以安全地识别.dll。

谁删除了不再使用的.dll?似乎每个程序都有自己的.net版本。最终必须填满磁盘?

1 个答案:

答案 0 :(得分:7)

你刚刚发现了一个简单的事实,.NET已经非常流行,13年后它有很多版本。大多数程序员都知道桌面版的1.0,1.1,2.0和4.0版本。它总是由NGEN预先设置,因此乘以2.大多数人都不知道mscorlib.dll包含非托管代码,所以它有两个不同的版本,一个用于32位,一个用于64位代码,乘以再次2。

这只适用于桌面。然后,您拥有针对不同运行时环境的版本。有Silverlight,5个不同的版本。 Windows Phone,4个版本。 Windows应用商店,2个版本。和XBox。它们很重要,因为您可以构建在这些目标上运行的程序。

然后是可移植类库,它们允许您选择要支持的目标集。每个选择的排列都有自己独特的引用程序集,因此您不会意外地使用在其中一个目标上不可用的类型。

所以真正令人惊讶的是你发现了少数

请记住,您找到的绝大多数只是参考组件。它们只包含元数据,没有代码,存在于c:\ Program Files(x86)\ Reference Assemblies目录中。您只在构建程序时使用它们。在运行时,“真实的”被使用,它与你构建的非常不同。确保它们匹配并且您不会遇到问题是微软的负担,他们非常擅长。

否则您列出的那个没有什么特别之处。它要求使用v2.0版本,即.NET Framework 2.0到3.5版本中使用的版本。即使您的桌面上没有安装其中一个版本,如果您有4.0,4.5或4.6,仍然可以运行它。桌面CLR自动将2.0.0.0的请求转换为4.0.0.0版本,非常兼容。