如何找到.NET的外部源代码?

Cod*_*shi 1 .net c#

我想回答这个问题,以为我可以查看Array源代码的内部以查看其实现方式。因此,我在.NET源代码中查找了该CreateInstance方法,发现该方法调用了主体为分号并在其他地方实现的外部方法。看起来像这样:

private unsafe static extern Array 
    InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds);
Run Code Online (Sandbox Code Playgroud)

题:

我如何找到上述外部方法的实现位置?

Cod*_*shi 5

要查找任何extern方法的源代码,请执行以下操作:

  1. 查找extern方法的名称。就我而言InternalCreate
  2. 转到此处,查找方法到外部方法的映射。就我而言,我需要查找InternalCreate,这是映射的外观。该类的名称是ArrayNative并且方法是CreateInstance

    FCFuncElement("InternalCreate", ArrayNative::CreateInstance)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此处找到映射的类。就我而言,我需要arraynative而且也需要该方法CreateInstance。实现就在那里,我在这里复制它,但为了简洁起见,删除了正文:

    FCIMPL4(Object*, ArrayNative::CreateInstance, 
        void* elementTypeHandle, INT32 rank, INT32* pLengths, INT32* pLowerBounds)
    {
        //...
    }
    
    Run Code Online (Sandbox Code Playgroud)

在这里,您将找到实现并研究代码。

  • 值得注意的是,这些链接用于.NET Core运行时。整个.NET框架所使用的运行时可能与“ dotnet / coreclr”存储库中显示的代码不同,例如,http://referencesource.microsoft中使用的CLR中可能存在本机类型。 .com /不在核心CLR中(不是我所知道的任何内容)。一种可能的解决方法是,使用https://source.dot.net/进行初始浏览,以便您看到.NET Core的外部依赖关系,而不是完整的.NET框架。 (3认同)