这个问题是关于装配参考的内部结构。
.Net Core 1.1 Hello世界控制台应用程序程序集(从dotnet new console
创建)不会向mscorlib
发出任何引用,只会向System.Runtime
和System.Console
发出引用,但它会发出调用到[mscorlib]System.Console
。
这怎么可能?
.assembly extern System.Runtime
{
.ver 4:1:0:0
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
}
.assembly extern System.Console
{
.ver 4:0:0:0
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
}
.assembly 'console1'
...
.class private auto ansi beforefieldinit Program
extends [System.Runtime]System.Object
...
IL_0006: call void class [mscorlib]System.Console::WriteLine(string)
...
答案 0 :(得分:0)
事实证明这是反汇编工具中的一个错误。
由于.NET Core未附带ildasm
,因此我使用了Mono中的monodis
。
现在我跟着.net-core: Equivalent of ILDASM / ILASM编译了ildasm for Mac form C ++ source,现在:
$ monodis bin/Debug/netcoreapp1.1/console1.dll | grep WriteLine
IL_0006: call void class [mscorlib]System.Console::WriteLine(string)
$ ildasm bin/Debug/netcoreapp1.1/console1.dll | grep WriteLine
IL_0006: call void [System.Console]System.Console::WriteLine(string)