FxCOp自定义规则



我一直在研究FxCOP自定义规则。我正在努力获得使用的IL指令行。我有一个基本的怀疑,当我们实现一个c#代码,我们得到操作码,这些是在不同的行为每个指令(源代码指令有多个操作码在一行)

现在,我的导师要求我计算使用多个操作码的不同行。然而,我的理解是,每个IL指令都在不同的行中。我将试着用以下方式来说明意见的分歧:

源代码

opcode 1, opcode 2, opcode 3
opcode 4, opcode 5
My Opinion                   My Mentor's Opinion
Opcode 1                     Opcode 1,Opcode 2, Opcode 3
Opcode 2                     Opcode 5, Opcode 6
opcode 3

我没能找出哪一个是真的。请帮助我找到如果任何给定的c#代码,IL指令是在单独的行,尽管指令是在同一行的源代码,或者如果它是我的导师相信,有一种方法找到不同的行。

谢谢

你可以这样写:

public override ProblemCollection Check(Member member)
{
    Method method = member as Method;
    if (method == null)
    {
        return base.Check(member);
    }
    Console.WriteLine("Method: {0}", member.Name);
    InstructionCollection ops = method.Instructions;
    foreach (Instruction op in ops)
    {
        Console.WriteLine("File: {0}, Line: {1}, Pos: {2}, OpCode: {3}", op.SourceContext.FileName, op.SourceContext.StartLine, op.SourceContext.StartColumn, op.OpCode);
    }
    Console.WriteLine();
    return base.Problems;
}

请注意,在发布模式下,代码行和OpCodes之间的关系有点"随机",因为c#编译器可以重新排列一些代码。在调试模式下,这种关系更加清晰。

注意(2)我只考虑StartLineStartColumn。有EndLineEndColumn性质

相关内容

  • 没有找到相关文章

最新更新