我使用 VS2010 构建了一个程序集,它具有对 .NET 4.0 的普通引用。
它还引用了 Ionic.Zip,后者引用了 .NET 2.0。
当我使用 ildasm 查看清单时,我发现 .NET 的两个版本都是我的程序集的直接依赖项,并且在 Ionic 程序集下再次列出了 2.0。
这是正常现象,还是存在一些我没有看到的 2.0 依赖性?
这是正常的,您将看到旧程序集中的公共类型公开的任何框架类的 .NET 2.0 程序集引用。例如在VS2008中编译的一个类库项目,代码如下:
using System;
using System.Text;
public class Class1 {
public static void Run(out StringBuilder sb) {
sb = new StringBuilder();
}
}
并在面向 4.0 的 VS2010 控制台模式应用程序中使用:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
StringBuilder sb;
Class1.Run(out sb);
}
}
在其清单中生成程序集引用,如下所示:
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern ClassLibrary3
{
.ver 1:0:0:0
}
.assembly extern mscorlib as mscorlib_2
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
请注意对 mscorlib 2.0 版本的引用,名为“mscorlib_2”。这是在运行时解决的。融合日志中没有任何迹象表明曾要求解析 mscorlib_2 程序集引用。创建的 StringBuilder 类对象是 4.0 版本。这可能意味着 CLR 程序集加载器正在重定向版本。我不知道有任何配置进行映射,猜测这是硬编码的。
对于仅使用 v2.0-v3.5sp1 版本的 .NET 程序集进行测试的代码来说,这当然可能会破坏行为。我还没有听说过一个案例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)