Интеграция пользовательского компилятора с IDE Visual Studio - PullRequest
13 голосов
/ 13 апреля 2010

Справочная информация : я хочу создать собственный компилятор VB, расширяющий «оригинальный» компилятор для обработки моих пользовательских атрибутов времени компиляции.

Вопрос : после того, как я создал свой пользовательский компилятор и получил исполняемый файл, способный компилировать код VB через стандартный интерфейс командной строки, как мне интегрировать этот компилятор с Visual Studio IDE? (чтобы при нажатии «compile» или «build» мой компилятор использовался вместо компилятора по умолчанию).

РЕДАКТИРОВАТЬ : (Поправьте меня, если я ошибаюсь)

Из приведенных здесь реакций я вижу, что этот вопрос немного шокирует, поэтому я подробнее объясню свои потребности и предпосылки: .NET предоставляет нам отличный механизм под названием Attributes. Насколько я понимаю, создание атрибутов применяет их предполагаемое поведение к приписанному элементу (сборка, модуль, класс, метод и т. Д.) - атрибуты должны быть отражены. Таким образом, настоящая хитрость здесь заключается в отражении и применении поведения в нужном месте.

Давайте возьмем Сериализацию, например: Мы украшаем класс с атрибутом Сериализуемый. Затем мы передаем экземпляр класса методу Serialize форматера. Форматировщик размышляет над экземпляром, проверяя, имеет ли он атрибут Serializable, и действует соответствующим образом.

Теперь, если мы рассмотрим атрибуты Синхронизация, Флаги, Устаревшие и CLSC-совместимые, то реальный вопрос: кто на них задумывается? По крайней мере, в некоторых случаях это должен быть компилятор (и / или IDE). Поэтому кажется, что если я хочу создать пользовательские атрибуты, которые изменяют поведение элемента независимо от какого-либо конкретного потребителя, я должен расширить компилятор, чтобы отражать их при компиляции.

Конечно, это не мое личное понимание: книга " Прикладные атрибуты .NET " предоставляет полный пример создания пользовательского атрибута и пользовательского компилятора C # для отражения этого атрибута во время компиляции ( Пример используется для реализации «проверенных исключений в стиле Java»).

Ответы [ 2 ]

3 голосов
/ 13 апреля 2010

Проверьте " Свойство BuildAction " и " Свойство CustomTool ".

Несколько лет назад я прочитал отличную статью о создании собственного компилятора, его регистрации и настройке этих свойств. Я не могу найти статью сейчас, но это должно начать вас.

2 голосов
/ 13 апреля 2010

Проверьте "MSBuild Overview" на http://msdn.microsoft.com/en-us/library/ms171452.aspx. Проекты Visual Studio являются проектами MSBuild. Я верю, что все, что вам нужно сделать, это внести пару небольших изменений. Я не сделал это для компилятора, но я сделал это с ILMerge после компиляции, и он прекрасно работает. Бесшовная и даже возможная отладка объединенных сборок.

...