2009-11-11 6 views
2

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

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

EDIT: То, что я действительно пытаюсь сделать здесь, заключается в том, чтобы поддерживать предварительные условия на методы, причем код предварительной настройки определяется атрибутами метода. Моя первоначальная мысль заключалась в том, что я мог бы найти начало метода, а затем вставить сгенерированный код для обработки предварительных условий.

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

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

Приветствия

ответ

3

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

Havent сделать что-нибудь с PostSharp, но угадывал бы его более подходящий, чем Mono, для реализации чего-то вроде предусловий или АОП. С другой стороны, вы можете быть в состоянии сделать что-то AOPy с DI контейнера, как Ninject

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

EDIT: В свете вашего желания делать предварительные условия ... Code Contracts in .net 4 определенно в этом направлении.

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

+0

Я быстро взглянул на PostSharp - выглядит хорошо, но я бы предпочел не отправлять стороннюю библиотеку с продуктом, чтобы это работало ... – Kazar

+1

Если вы не хотите отправлять Сторонняя библиотека, используйте ILMerge для объединения этих сборок в свои. Для этого вы можете использовать шаг после сборки. –

+0

Я предполагаю, однако, что PostSharp нужно будет установить для каждого разработчика, который должен построить с использованием этих предварительных условий? – Kazar

0

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

+0

[или нет] (http://www.douglaspurdy.com/2009/11/10/from-oslo-to-sql-server-modeling/): P –

+0

Wow; не видел этого, спасибо. – zac

+0

Также посмотрите на последнее сообщение для баланса (и twitterverse для противоположного вида: P) –

Смежные вопросы