获取方法体c#

问题描述:

我想写一个自定义规则(代码分析)其中,如果方法的主体包含空语句,则会引发错误。获取方法体c#

但是,有一个问题。我似乎无法弄清楚如何获得方法的正文(方法中的文本)。

如何获取方法内的文本并将其分配给字符串?

在此先感谢。

仅供参考;我在visual studio中使用c#,用FxCop来制定规则。

编辑:添加了一些代码供参考,这是行不通的。

using Microsoft.FxCop.Sdk; 
using Microsoft.VisualStudio.CodeAnalysis.Extensibility; 


public override ProblemCollection Check(Member member) 
     { 
      Method method = member as Method; 
      if (method == null) 
      { 
       return null; 
      } 

      if (method.Name.Name.Contains("{}")) 
      { 
       var resolution = GetResolution(member.Name.Name); 
       var problem = new Problem(resolution, method) 
            { 
             Certainty = 100, 
             FixCategory = FixCategories.Breaking, 
             MessageLevel = MessageLevel.Warning 
            }; 
       Problems.Add(problem); 
      } 

      return Problems; 
     } 
+1

您是否试图自己找到解决方案?你可能会显示你使用的代码作为一些上下文吗? – TheGeekZn

+0

你走了。正如你所看到的,我已经尝试了Contains函数来进行比较;但如果我能得到一个字符串中的文本,然后比较也将是了不起的。无论解决方案是什么。 – Matthijs

+0

你可以直接将'member'作为'method'吗?不知道类,我会假设'method.Name.Name.ToString()。Contains(“{}”)'可能会有所帮助。 – TheGeekZn

FxCop不分析源代码,它适用于使用任何语言构建的.Net程序集。

您可以找到方法是否包含语句或不使用的FxCop,我建议你阅读文档并检查现有规则的执行去了解它。

其他代码中间的空语句可能会被编译器移除,它使用的FxCop您可能无法找到。如果你想分析源代码,你应该看看StyleCop。

然而,有一个问题。我似乎无法弄清楚如何获得方法 (该方法中的文本)的正文。

你不能。 FxCop不能基于源工作,但分析编译的字节码。

你可以做的是找到源头 - 这是不完全微不足道的 - 但你有没有FxCop的API这样做。起点可能是分析pdb文件(不知道在哪里可以找到文档),因为它们可以指向包含该方法的文件。

+0

有没有其他方法可以实现我想要的?是要制定一个规则,将文本与我提供的文本进行比较:{}? – Matthijs

+0

再说一遍:FxCop不能与源代码一起使用,但是使用字节代码。它在生成的程序集上被称为AFTER编译。因此,运行时无法轻松访问源代码,而且它从来没有计划过,所以FxCope的语言是中性的。它根本不检查来源。 – TomTom