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栏)