Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何找到.NET的外部源代码?_C#_.net - Fatal编程技术网

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

C# 如何找到.NET的外部源代码?,c#,.net,C#,.net,我想回答这个问题,我想看看数组源代码的内部,看看它是如何实现的。因此,我查找了CreateInstance方法,发现它调用了一个外部方法,该方法的主体是分号,并在其他地方实现。下面是它的外观: private unsafe static extern Array InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds); 问题: 如何查找上述外部方法的实现位置?要查找任何extern方法的源代

我想回答这个问题,我想看看
数组
源代码的内部,看看它是如何实现的。因此,我查找了
CreateInstance
方法,发现它调用了一个外部方法,该方法的主体是分号,并在其他地方实现。下面是它的外观:

private unsafe static extern Array 
    InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds);
问题:


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

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

  • 查找
    extern
    方法的名称。在我的例子中,它是
    InternalCreate
  • 找到方法到外部方法的映射。在我的例子中,我需要找到
    InternalCreate
    ,下面是映射的样子。类的名称为
    ArrayNative
    ,方法为
    CreateInstance

    FCFuncElement("InternalCreate", ArrayNative::CreateInstance)
    
  • 查找映射的类。在我的例子中,我需要
    arraynative
    ,我需要方法
    CreateInstance
    。实现就在那里,我在这里复制它,但为了简洁起见删除了主体:

    FCIMPL4(Object*, ArrayNative::CreateInstance, 
        void* elementTypeHandle, INT32 rank, INT32* pLengths, INT32* pLowerBounds)
    {
        //...
    }
    

  • 您将在那里找到实现并研究代码。

    注意,这些链接是针对.NET核心运行时的。完整.NET framework使用的运行时可能不同于
    dotnet/coreclr
    repo中显示的代码,例如,可能在中使用的CLR中有一个本机类型不在核心CLR中(据我所知,没有)。一种可能的解决方法是,使用instead进行初始浏览,这样您就可以看到.NET Core的外部依赖项,而不是完整的.NET framework。@ScottChamberlain感谢您的提醒—我甚至没有意识到我正在查看的是.NET Core运行时。你能详细说明一下你的解决办法吗?如果我想在我的答案中加入您的解决方案,它将进入哪一步?没关系,他们为CLR的完整版本和核心版本维护了相同的代码库。只是一堆关闭功能的ifdef。这可能不会永远是正确的,coreclr可能会随着时间的推移而出现分歧,但现在已经足够正确了。解决方法是进入问题中的步骤,而不是答案。您可以将“因此,我查找了
    CreateInstance
    方法”更改为“因此,我查找了
    CreateInstance
    方法”(单击两个链接并检查您的URL栏)