如何查找.NET的extern源代码?
问题描述:
我想回答this问题和想法我会看看Array
源代码的内部,看看它是如何实现的。因此,我查看了CreateInstance
方法的in .NET source code,发现它调用了一个外部方法,其主体是分号并在别处实现。这里是什么样子:如何查找.NET的extern源代码?
private unsafe static extern Array
InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds);
问:
如何找到其中对于上述外部方法的实现?
答
找到任何extern
方法的源代码,请执行下列操作:
- 找到
extern
方法的名称。在我的情况下,它是InternalCreate
。 -
去here并找到方法到外部方法的映射。在我的情况下,我需要找到
InternalCreate
,这里是映射的样子。类的名称为ArrayNative
和方法是CreateInstance
:FCFuncElement("InternalCreate", ArrayNative::CreateInstance)
-
找到映射类here。在我的情况下,我需要
arraynative
,我需要的方法CreateInstance
。实现就在那里,我在这里复制,但为了简便起见去除身体:FCIMPL4(Object*, ArrayNative::CreateInstance, void* elementTypeHandle, INT32 rank, INT32* pLengths, INT32* pLowerBounds) { //... }
在那里你会找到的实施和研究代码。
一个小记录,那些链接是为.NET Core运行时。完整.NET框架使用的运行时可能与'dotnet/coreclr'回购中显示的代码不同,例如,可能在http://referencesource.microsoft中使用CLR中的本机类型.com /那不在核心CLR中(不是我所知道的)。一个可能的解决方法是,使用https://source.dot.net/代替执行初始浏览,以便看到.NET Core的外部依赖关系,而不是完整的.NET框架。 –
@ScottChamberlain感谢您的注意 - 我甚至没有意识到这是我在看的.NET Core Runtime。你能否详细说明你的解决方法?如果我想将解决方法放在我的答案中,它会采取什么措施? – CodingYoshi
没关系,他们为CLR的完整版本和核心版本维护相同的代码库。只需一堆#ifdefs即可关闭功能。这可能永远不会是真的,coreclr可能会随着时间推移发生分歧,但现在已经足够了。 –