Ilasm.exe在.NET Standard 2.0 dll中注入mscorlib依赖项

时间:2017-08-18 12:48:58

标签: .net-core ilasm

我正在从IL构建.NET Core 2.0库。我之前对.NET Core 1.0 / 1.1做的完全相同,没有任何问题。但是,同样的事情不适用于.NET Core 2.0 DLL。

运行之后:

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe /OUTPUT=output.dll /nologo  /quiet /dll /resource=input.dll.res /ssver=6.0 input.dll.il

我收到此警告:

warning : Reference to undeclared extern assembly 'mscorlib'. Attempting autodetect

因此,mscorlib确实在output.dll中显示为依赖项(我不希望它出现在那里)。

在input.dll.il(和res文件)中,根本没有提到mscorlib(mscorlib字符串永远不会出现在文件中,我仔细检查过这个):

//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
//  Copyright (c) Microsoft Corporation.  All rights reserved.

// Metadata version: v4.0.30319
.module extern 'advapi32'
.module extern 'kernel32'
.module extern 'Kernel32'
.module extern 'Ncrypt'
.module extern 'crypt32'
.module extern 'Crypt32'
.module extern 'secur32'
.assembly extern 'netstandard'
{
  .publickeytoken = (CC 7B 13 FF CD 2D DD 51 )                         // .{...-.Q
  .ver 2:0:0:0
}
.assembly extern 'Microsoft.Win32.Registry'
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
  .ver 4:1:0:0
}
.assembly 'MyLibrary'
{
...

我试图在工作文件夹中复制netstandard.dll而没有任何效果。也许使用.NET Core 2.0需要特殊版本的ilasm.exe?我使用.NET Framework 4.5中的那个,因为我在.NET Core 2.0 SDK中找不到任何ilasm(也许我在错误的地方搜索)。或者还有什么原因?

.NET Core 1.0(运行良好)的唯一区别是.assembly extern 'netstandard'.assembly extern 'System.Runtime'

1 个答案:

答案 0 :(得分:2)

.NET Core ilasm存在一个相关问题(可能是从完整框架中分离出来的):https://github.com/dotnet/coreclr/issues/10590