Справочная информация : я хочу создать собственный компилятор VB, расширяющий «оригинальный» компилятор для обработки моих пользовательских атрибутов времени компиляции.
Вопрос : после того, как я создал свой пользовательский компилятор и получил исполняемый файл, способный компилировать код VB через стандартный интерфейс командной строки, как мне интегрировать этот компилятор с Visual Studio IDE? (чтобы при нажатии «compile» или «build» мой компилятор использовался вместо компилятора по умолчанию).
РЕДАКТИРОВАТЬ : (Поправьте меня, если я ошибаюсь)
Из приведенных здесь реакций я вижу, что этот вопрос немного шокирует, поэтому я подробнее объясню свои потребности и предпосылки:
.NET предоставляет нам отличный механизм под названием Attributes. Насколько я понимаю, создание атрибутов применяет их предполагаемое поведение к приписанному элементу (сборка, модуль, класс, метод и т. Д.) - атрибуты должны быть отражены. Таким образом, настоящая хитрость здесь заключается в отражении и применении поведения в нужном месте.
Давайте возьмем Сериализацию, например: Мы украшаем класс с атрибутом Сериализуемый. Затем мы передаем экземпляр класса методу Serialize форматера. Форматировщик размышляет над экземпляром, проверяя, имеет ли он атрибут Serializable, и действует соответствующим образом.
Теперь, если мы рассмотрим атрибуты Синхронизация, Флаги, Устаревшие и CLSC-совместимые, то реальный вопрос: кто на них задумывается? По крайней мере, в некоторых случаях это должен быть компилятор (и / или IDE). Поэтому кажется, что если я хочу создать пользовательские атрибуты, которые изменяют поведение элемента независимо от какого-либо конкретного потребителя, я должен расширить компилятор, чтобы отражать их при компиляции.
Конечно, это не мое личное понимание: книга " Прикладные атрибуты .NET " предоставляет полный пример создания пользовательского атрибута и пользовательского компилятора C # для отражения этого атрибута во время компиляции ( Пример используется для реализации «проверенных исключений в стиле Java»).