Существует ли эквивалент С# инструмента обработки аннотаций Java (apt)?

Инструмент apt в Java позволяет вам выполнять код во время компиляции на основе аннотаций, которые вы размещаете в своем коде. C# имеет атрибуты, которые работают как аннотации Java, но как бы я ни старался, я не могу найти готовый инструмент (в идеале с открытым исходным кодом), который обеспечивает те же функции для C#, что и apt для Java. Существует ли такой инструмент?


person swift    schedule 07.12.2011    source источник


Ответы (3)


Есть некоторые. Такие как:

  1. Sprint.Net (с открытым исходным кодом?) http://www.springframework.net/doc-latest/reference/html/aop.html
  2. Postsharp (стоит денег) http://www.sharpcrafters.com/aop.net/custom-attributes
  3. Учебное пособие (с открытым исходным кодом) http://www.codeproject.com/KB/architecture/aopsimplestscenario.aspx

Поиск Google, который я использовал, был:

https://www.google.com/search?q=.net+aop+attributes&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

Раньше я бегло просматривал PostSharp, и он выглядит очень аккуратно. Я считаю, что Sprint.Net - это порт из библиотеки Java Sprint. Существует также множество библиотек для генерации кода, которые вы можете использовать, анализируя свои сборки и выполняя свою логику.

person Dessus    schedule 09.01.2012
comment
Spring — одна из тех раздутых фреймворков, которые я не буду использовать, если мне нужен только простой АОП. - person Hadi Eskandari; 29.05.2012
comment
AOP (аспектно-ориентированное программирование) не является APT (обработкой аннотаций). Первый также известен как улучшение или плетение, а второй чаще всего представляет собой генерацию кода на основе «модели» компилируемого кода. Это совершенно разные вещи - все приведенные выше ссылки относятся к AOP, а не к APT. - person Rob Bygrave; 16.07.2019

Краткий ответ: нет.

Но если вы хотите создать свой собственный инструмент, взгляните, например, на Mono.Cecil. Это позволяет проверять и модифицировать сборку. Если вы используете Visual Studio (или аналогичную), вы можете настроить проект так, чтобы он выполнял команды после сборки (т. е. выполнял ваш инструмент на основе Mono.Cecil).

person metator    schedule 29.05.2012