Mono.Cecil - 如何找到 PInvoke DLL 名称?

Mono.Cecil - How can I found out PInvoke DLL name?

Mono.Cecil 提供了一种通过 method.IsPInvokeImpl 检查方法是否为 pinvoke 的方法,还通过 method.PInvokeInfo 提供了更多信息。我怎样才能找到 dll 名称?

P/Invoke 方法的 IL 如下所示(例如,kernel32!LockFile):

.method assembly hidebysig static pinvokeimpl("kernel32.dll" lasterr winapi) 
    bool LockFile (
        class Microsoft.Win32.SafeHandles.SafeFileHandle handle,
        int32 offsetLow,
        int32 offsetHigh,
        int32 countLow,
        int32 countHigh
    ) cil managed preservesig 
{
}

Mono.Cecil 镜像 PInvokeInfo class 中的 pinvokeimpl 元数据,第一个字符串打包为 ModuleReference。因此,method.PInvokeInfo.Module.Name 给出了 DLL/dylib 名称。