3
我使用VS2010構建了一個程序集,並且它具有對.NET 4.0的普通香草引用。是.net程序集清單中提升的依賴項?
它也有一個參考Ionic.Zip,它有一個.NET 2.0的參考。
當我用ildasm查看清單時,我發現.NET的兩個版本都是我的程序集的直接依賴項,再加上2.0在Ionic程序集下再次列出。
這是正常的,還是有2.0依賴,我只是沒有看到?
我使用VS2010構建了一個程序集,並且它具有對.NET 4.0的普通香草引用。是.net程序集清單中提升的依賴項?
它也有一個參考Ionic.Zip,它有一個.NET 2.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();
}
}
而在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版本中測試過。我還沒有聽說過一個案例。