反编译.NET程序集仅显示throw null;

时间:2018-07-18 11:11:03

标签: c# .net reflection decompiling

我想了解更多有关System.Linq.Expression。*中内容的工作方式。

第一种方法:

VisualStudio告诉我这是我要查找的文件:    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Core.dll

因此,我在dnSpy中打开了该文件,但是对于我想查看的类型,它没有任何实现。从字面上看,所有内容都实现为throw null;

我是怎么走的:

所以我要做的只是在Visual Studio中引用System.Linq.Expressions.Expression类型之一,突出显示它并按F12键。

VisualStudio显示了一个不错的元数据文件,在其顶部显示了以下内容:

#region Assembly System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Core.dll
#endregion

我打开了错误的文件,而实际的定义实际上在其他地方吗?

替代

我知道互联网上也有官方的microsoft reference source code,令我惊讶的是,所有内容的显示都非常符合预期!

问题

因为(至少对我来说)这是一个非常令人困惑的问题,所以我什至不知道该问什么是正确的问题。 我想,通常情况下,对这些事情有更多了解的人很可能会用一个答案来解释一切(可能即使没有实际单独回答以下所有这些问题,但我会很感激的:))

  • 为什么反编译我尝试过的所有其他类型都能正常工作?
  • System.Linq.Expressions。*有什么特别之处?
  • 从参考源中我可以看到文件本身位于Microsoft/Scripting/Ast/中,因此我认为也许某个名称类似于.dll的.dll存在于某个地方,但我找不到它(这是预期的,是吗?源文件的文件夹结构实际上没有说明名称空间,恰恰是按照惯例,大多数程序员尝试使源文件的文件夹结构尽可能与名称空间匹配)
  • 这与DebuggerTypeProxy有关吗
  • 我打开了错误的文件吗?如果是这样,哪一个是正确的?更重要的是,我怎么会自己找到那个人?

0 个答案:

没有答案