Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否在.net程序集清单中提升依赖项?_.net - Fatal编程技术网

是否在.net程序集清单中提升依赖项?

是否在.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;

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

它还引用了爱奥尼亚.Zip,后者引用了.NET2.0

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


这是正常的,还是有一些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版本中进行过测试。我还没有听说过一个案子