2010-10-31 34 views
3

我使用VS2010構建了一個程序集,並且它具有對.NET 4.0的普通香草引用。是.net程序集清單中提升的依賴項?

它也有一個參考Ionic.Zip,它有一個.NET 2.0的參考。

當我用ildasm查看清單時,我發現.NET的兩個版本都是我的程序集的直接依賴項,再加上2.0在Ionic程序集下再次列出。

這是正常的,還是有2.0依賴,我只是沒有看到?

回答

3

這是正常現象,您會看到舊版程序集中公開類型公開的任何框架類的.NET 2.0程序集引用。例如,一個類庫項目在VS2008編譯使用此代碼:

using System; 
using System.Text; 

public class Class1 { 
    public static void Run(out StringBuilder sb) { 
     sb = new StringBuilder(); 
    } 
} 

而在VS2010控制檯模式的應用程序,針對4.0中使用:

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的名稱爲「mscorlib_2」的2.0版本的引用。這在運行時解決。融合日誌沒有任何跡象表明它曾經被要求解析mscorlib_2程序集引用。所創建的StringBuilder類對象是4.0版本。這可能意味着CLR程序集加載器正在重定向該版本。我不知道映射的任何配置,猜測這是硬編碼的。

這當然是潛在的破壞行爲的代碼,只有在.NET程序集的v2.0-v3.5sp1版本中測試過。我還沒有聽說過一個案例。

相關問題