Я хочу написать правило, которое не будет выполнено, если выделение объекта будет выполнено в любом методе, вызываемом методом, отмеченным определенным атрибутом.
До сих пор это работало, перебирая все методы, вызывающие мой метод, чтобы проверить, используя CallGraph.CallersFor()
, чтобы увидеть, есть ли атрибут у любого из этих родительских методов.
Это работает для проверки родительских методов в той же сборке, что и проверяемый метод, однако при чтении в режиме онлайн кажется, что когда-то CallGraph.CallersFor()
просматривал все сборки, но теперь это не так.
Вопрос: Есть ли способ получить список методов, вызывающих данный метод, в том числе из другой сборки?
Альтернативный ответ: Если вышеупомянутое невозможно, как пройтись по циклу через каждый метод, который вызывается данным методом, в том числе из другой сборки.
Пример:
-----In Assembly A
public class ClassA
{
public MethodA()
{
MethodB();
}
public MethodB()
{
object o = new object(); // Allocation i want to break the rule
// Currently my rule walks up the call tree,
// checking for a calling method with the NoAllocationsAllowed attribute.
// Problem is, because of the different assemblies,
// it can't go from ClassA.MethodA to ClassB.MethodB.
}
}
----In Assembly B
public var ClassAInstance = new ClassA();
public class ClassB
{
[NoAllocationsAllowed] // Attribute that kicks off the rule-checking.
public MethodA()
{
MethodB();
}
public MethodB()
{
ClassAInstance.MethodA();
}
}
Я не против, когда правило сообщает об ошибке, на данном этапе достаточно получить ошибку.