Предварительная обработка C # - Методы обнаружения - PullRequest
2 голосов
/ 11 ноября 2009

Мне требуется возможность предварительной обработки ряда файлов C # в качестве шага предварительной сборки для проекта, обнаружения запуска методов и вставки сгенерированного кода в начале метода перед любым существующим кодом. У меня, однако, есть проблема с обнаружением открытия метода. Сначала я попытался сопоставить регулярное выражение, но получилось слишком много ложных срабатываний.

Я бы использовал отражение, но класс MethodInfo не ссылается на точку в исходном источнике.

РЕДАКТИРОВАТЬ : То, что я действительно пытаюсь сделать здесь, - это поддерживать предварительные условия для методов, причем этот код предварительного условия определяется атрибутами метода. Сначала я думал, что могу найти начало метода, а затем вставить сгенерированный код для обработки предварительных условий.

Есть ли лучший способ сделать это? Я открыт для создания надстройки Visual Studio, если это необходимо.

Это проект .NET 2.0.

Приветствия

Ответы [ 2 ]

3 голосов
/ 11 ноября 2009

PostSharp или Mono.Cecil позволит вам сделать это чисто , изменив сгенерированный код, не вдаваясь в написание синтаксического анализатора C #, который вряд ли будет для вас основной деятельностью ...

Ничего не сделал с PostSharp, но предположил бы, что он более уместен, чем Mono, для реализации чего-то вроде предусловий или AOP. Кроме того, вы можете сделать что-то AOPy с DI-контейнером, как Ninject

Но, конечно, применимость этой идеи зависит - вы не сказали ничего другого, кроме того, что вы хотели вставить код в начале методов ...

РЕДАКТИРОВАТЬ: В свете вашего желания выполнять предварительные условия ... Код контрактов в .net 4 определенно в этом направлении.

Какой у вас инструмент? Что плохого в том, что поставляется одна DLL-библиотека Mono.Cecil.dll? В любом случае инструмент для работы - это что-то иное, кроме парсера.

0 голосов
/ 11 ноября 2009

Я уверен, что есть более простой способ, но это может быть хорошим поводом взять MGrammer за спин.

...