gpt4 book ai didi

.net - .net 程序集 list 中是否提升了依赖项?

转载 作者:行者123 更新时间:2023-12-02 00:37:21 25 4
gpt4 key购买 nike

我用 VS2010 构建了一个程序集,它有一个对 .NET 4.0 的普通引用。

它还引用了 Ionic.Zip,后者引用了 .NET 2.0。

当我使用 ildasm 查看 list 时,我看到两个版本的 .NET 作为我的程序集的直接依赖项,加上 2.0 再次列在 Ionic 程序集下。

这是正常的,还是有一些我没有看到的 2.0 依赖项?

最佳答案

这很正常,您会看到 .NET 2.0 程序集对旧程序集中公共(public)类型公开的任何框架类的引用。比如用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);
}
}

在其 list 中生成程序集引用,如下所示:

// 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
}

请注意对 2.0 版 mscorlib 的引用,名为“mscorlib_2”。这是在运行时解决的。融合日志中没有任何迹象表明它曾被要求解析 mscorlib_2 程序集引用。创建的 StringBuilder 类对象是 4.0 版本。这可能意味着 CLR 程序集加载程序正在重定向版本。我不知道执行映射的任何配置,猜测这是硬编码的。

对于仅使用 v2.0-v3.5sp1 版本的 .NET 程序集测试的代码,这当然是潜在的破坏行为。我还没有听说过一个案例。

关于.net - .net 程序集 list 中是否提升了依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com