GetCallingAssembly
От: Mab Россия http://shade.msu.ru/~mab
Дата: 16.03.04 10:49
Оценка:
Столкнулся со следующей проблемой: есть код, вызывающий метод Assembly.GetCallingAssembly. Идея проста -- получаем вызвавшую сборку, а затем анализируем ее ресурсы и атрибуты. Все работало прекрасно и замечательно, пока в один прекрасный день при сборке в release не произошел inlining, в результате чего мы стали искать ресурсы совсем не там, где нужно.

Есть ли какие-то общепринятые способы решения этой проблемы? Хотелось бы запретить jitter-у делать inlining для некоторого отдельного метода. Конечно, можно просто сделать его достаточно длинным, но хотелось бы чего-то более правильного.

Кстати, в исходниках ротора есть забавный фрагмент:
// declaring a local var of this enum type and passing it by ref into a function that needs to do a 
// stack crawl will both prevent inlining of the calle and pass an ESP point to stack crawl to
[Serializable]
internal enum StackCrawlMark
{
    LookForMe = 0,
    LookForMyCaller = 1,
    LookForMyCallersCaller = 2
}

Этот StackCrawlMark дальше используется в Get[Calling/Executing]Assembly.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.