2

私は Fody アドインを作成しています。コードを挿入して、ユーザーにエラー メッセージを提供することができます。命令のシーケンス ポイントは特定できますが、CustomAttributes のシーケンス ポイントを見つける方法が見つかりません。

属性が間違って適用された場合に、エラーの場所を見つけるヒントをデバッガーに提供するために、この情報を取得する必要があります。

だから基本的に私はこのようなものを持っています:

[MyAttribute]
public void Test()
{

}

ここで、MyAttribute 属性の SequencePoint を取得したいと考えています。

**編集: ** 私が反対票を投じたので (理由についての情報なしで) ここにいくつかの追加情報があります。次のように、命令のシーケンス ポイントにアクセスできます。

public static SequencePoint GetSP(MethodDefinition method)
{
    return method.Body.Instructions
        .Where(instruction => instruction.SequencePoint != null)
        .Select(instruction => instruction.SequencePoint)
        .FirstOrDefault();
}

命令には問題なく機能しますが、属性にアクセスすると、シーケンス ポイントを取得する方法がわかりません。

public static SequencePoint GetSP(MethodDefinition method)
{
    var attribute = method.CustomAttributes.First();
    // what to enter here to get SequencePoint of attribute?
}
4

1 に答える 1

3

これは不可能です。属性にはシーケンス ポイントがありません。代わりに、メソッドの最初のシーケンスポイントを使用することをお勧めします

于 2015-02-28T09:56:54.643 に答える