代码之家  ›  专栏  ›  技术社区  ›  bmargulies

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

  •  3
  • bmargulies  · 技术社区  · 14 年前

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

    当我使用ildasm查看清单时,我将.NET的两个版本都视为我的程序集的直接依赖项,另外2.0也列在Ionic程序集下。

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   Hans Passant    14 年前

    这是正常的,对于由遗留程序集中的公共类型公开的任何框架类,都将看到.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
    }
    

    当然,这可能会破坏仅在.NET程序集的v2.0-v3.5sp1版本中测试过的代码的行为。我还没有听说过一个案子。