获取方法体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;
}
答
FxCop不分析源代码,它适用于使用任何语言构建的.Net程序集。
您可以找到方法是否包含语句或不使用的FxCop,我建议你阅读文档并检查现有规则的执行去了解它。
其他代码中间的空语句可能会被编译器移除,它使用的FxCop您可能无法找到。如果你想分析源代码,你应该看看StyleCop。
答
然而,有一个问题。我似乎无法弄清楚如何获得方法 (该方法中的文本)的正文。
你不能。 FxCop不能基于源工作,但分析编译的字节码。
你可以做的是找到源头 - 这是不完全微不足道的 - 但你有没有FxCop的API这样做。起点可能是分析pdb文件(不知道在哪里可以找到文档),因为它们可以指向包含该方法的文件。
您是否试图自己找到解决方案?你可能会显示你使用的代码作为一些上下文吗? – TheGeekZn
你走了。正如你所看到的,我已经尝试了Contains函数来进行比较;但如果我能得到一个字符串中的文本,然后比较也将是了不起的。无论解决方案是什么。 – Matthijs
你可以直接将'member'作为'method'吗?不知道类,我会假设'method.Name.Name.ToString()。Contains(“{}”)'可能会有所帮助。 – TheGeekZn