是否在.net程序集清单中提升依赖项?
我用VS2010构建了一个程序集,它有一个对.NET4.0的普通引用 它还引用了爱奥尼亚.Zip,后者引用了.NET2.0 当我使用ildasm查看清单时,我看到.NET的两个版本都是我程序集的直接依赖项,加上2.0再次列在Ionic程序集下是否在.net程序集清单中提升依赖项?,.net,.net,我用VS2010构建了一个程序集,它有一个对.NET4.0的普通引用 它还引用了爱奥尼亚.Zip,后者引用了.NET2.0 当我使用ildasm查看清单时,我看到.NET的两个版本都是我程序集的直接依赖项,加上2.0再次列在Ionic程序集下 这是正常的,还是有一些2.0依赖关系我只是看不到?这是正常的,您将看到遗留程序集中公共类型公开的任何框架类的.NET 2.0程序集引用。例如,使用以下代码在VS2008中编译的类库项目: using System; using System.Text;
这是正常的,还是有一些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”。这是在运行时解决的。从fusion日志中没有迹象表明它曾被要求解析mscorlib_2组件引用。创建的StringBuilder类对象是4.0版本。这可能意味着CLR程序集加载程序正在重定向版本。我不知道有任何配置会进行映射,猜测这是硬编码的
当然,这可能会破坏代码的行为,而这些代码只在.NET程序集的v2.0-v3.5sp1版本中进行过测试。我还没有听说过一个案子