如何遵循方法的作用?

时间:2016-08-04 14:04:13

标签: c# asp.net

我是ASP.Net中的C#新手。我正在使用VS 2015和NetCore项目。我在PHP(PHPStorm IDE)中用于控制 - 单击一个方法名称以查看它的定义并查看它的作用。

在VS 2015中,例如对于Controller中的View(),我必须右键单击 - >转到定义。但定义就是这样:

...
//
// Summary:
//     Creates a Microsoft.AspNetCore.Mvc.ViewResult object that renders a view to the
//     response.
//
// Returns:
//     The created Microsoft.AspNetCore.Mvc.ViewResult object for the response.
[NonAction]
public virtual ViewResult View();
...

所以我无法看到它实际上做了什么。这是因为它是封闭源吗?

修改

我从Jetbrains免费安装了dotPeek,并且对于我正在寻找的东西非常棒。它甚至还有Control-Click转到定义:

https://www.jetbrains.com/decompiler/

2 个答案:

答案 0 :(得分:2)

这不是因为它是封闭源代码,而是其中的代码已经编译过,您只是通过DLL引用它(并且您没有显式加载符号以通过实际源进行调试)。

如果您想真正看到方法调用链及其来源的样子,可以查看ASP.NET Core MVC repository on GitHub或尝试debug against the source itself as mentioned here

View()方法

的调用堆栈

如果你想知道幕后实际发生了什么并且不需要显式调试源本身,你可以在之前链接的GitHub仓库中跟随以查看以下调用。

    来自Controller.cs

  • View()

    • 接受您的参数并将它们传递给另一个显式获取View / Model参数的重载。
  • 来自Controller.cs

  • View(name, model)

    • 使用参数中的数据和您要定位的视图构建ViewResult对象。
  • 来自ViewResult.cs

  • ViewResult()

    • 提取必要的服务并解析查看位置,然后尝试执行操作。
  • 来自ViewResultExecutor.cs

  • ExecuteAsync()

    • 传递所有上下文,视图和数据并记录正在进行的请求。
  • 来自ViewExecutor.cs

  • ExecuteAsync()

    • 确保一切正确并处理构建实际响应并使用适当的标题,内容等将其清除给用户。

答案 1 :(得分:1)

是的,除非你使用像reflector.net这样的工具来反映它,否则你将无法看到它的实现。

通常,您可以看到的唯一代码就是解决方案中的代码。