程序集引用内部:[mscorlib] System.Console被发出,但引用中不存在mscorlib

时间:2017-06-10 05:09:00

标签: .net .net-core

这个问题是关于装配参考的内部结构。

.Net Core 1.1 Hello世界控制台应用程序程序集(从dotnet new console创建)不会向mscorlib发出任何引用,只会向System.RuntimeSystem.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)

...

1 个答案:

答案 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)