背景介紹
在netcore遷移過程中,發現原有針對netframework平臺編譯的dll文件,可以直接在netcore的應用(netcoreapp.31)中加載並使用。對此感到比較好奇,本文就針對此知識點進行探究和梳理。
- Tccc.TypeForwarding.Net451.SPI:代表針對net451平臺的類庫項目;
- Tccc.TypeForwarding.NetApp:代表針對net451的控制檯應用項目;
- Tccc.TypeForwarding.NetCoreApp:代表針對netcore3.1的控制檯應用項目;
Tccc.TypeForwarding.Net451.SPI中定義的類型Person源碼如下:
public class Person
{
public string Name { get; set; }
public string Age { get; set; }
public void PrintInfo()
{
Console.WriteLine("Assembly FullName=" + typeof(string).Assembly.FullName);
Console.WriteLine("Assembly Location=" + typeof(string).Assembly.Location);
}
}
兩個控制檯應用的Program源碼相同,均如下:
internal class Program
{
static void Main(string[] args)
{
Person p1 = new Person() { Name = "張三" };
p1.PrintInfo();
Console.ReadLine();
}
}
.NETFramewok平臺的特徵分析
NETCore平臺的特徵分析
不過這裏值得注意的時,此時Tccc.TypeForwarding.Net451.SPI的目標平臺依然是net451,而且根據上面反編譯我們明明看到Tccc.TypeForwarding.Net451.SPI是引用了NET Framework的著名程序集mscorlib呢?
這裏我們再次反編譯netcore3.1目錄下的Tccc.TypeForwarding.Net451.SPI程序集,驗證確實還存在mscorlib的引用;
PS:由於演示程序直接在VS中可方便查看,如果讀者是以現有程序分析驗證則可通過windbg的SOS擴展命令dumpdomain查看分析。