Визуальные студии 2010, колоризаторы, интеллисенс и остальное. Когда начать! - PullRequest
6 голосов
/ 31 мая 2010

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

Моя цель - просто добраться до точки, где я могу открыть документ, и все окрашено в красный цвет, отсюда я могу реализовать соответствующую логику синтаксического анализа.

Вот что я пробовал / нашел:

1) Загрузил все соответствующие SDK и т. П. Найден пример ook (http://code.msdn.microsoft.com/ookLanguage) - не скомпилирован, не сработал.

2) Почти ничего не зная о MEF, прочитайте «Внедрение языковой службы с использованием инфраструктуры управляемых пакетов» - http://msdn.microsoft.com/en-us/library/bb166533(v=VS.100).aspx

Это было в значительной степени копирование и вставка всех основных вещей здесь, а также обновление некоторых ссылок, которые были устаревшими с образцом, см. http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/a310fe67-afd2-4592-b295-3fc86fec7996

Теперь я дошел до того, что при запуске пакета MEF, по-видимому, правильно подключился (я знаю это, потому что при открытом отладчике я вижу, что пакеты инициализируются и методы FDoIdle подвергаются ударам).

Когда я открываю файл с расширением, которое я зарегистрировал с помощью ProvideLanguageExtensionAttribute, все умирает, как будто в бесконечном цикле, но все же символы отладки не попадают (хотя они загружены).

Глядя на пример ook и примеры MEF, они кажутся совершенно разными подходами к одной и той же проблеме. В примере ook есть понятия контроллеров Clasification и Completion, которые не упомянуты в примере MEF. Кроме того, кажется, что они не создают службы Package или Language, поэтому я понятия не имею, как она должна работать?

С примером MEF я предполагаю, что мне нужно подключиться к IScanner.ScanTokenAndProvideInfoAboutIt, чтобы обеспечить подсветку синтаксиса? Что было бы хорошо, если бы я мог ударить этот метод.

Так что мой первый вопрос, я думаю, какой подход я должен выбрать здесь? Или они оба как-то связаны?

Мой второй вопрос: где я могу найти базовый полностью работающий проект, который реализует стандартную подсветку синтаксиса bog и intellisense или VS2010?

В-третьих, в примере MEF, когда я создавал пакет, для меня было создано несколько тестовых проектов. Похоже, что интеграционные тесты запускают тестовую установку VS2010 как-то, но тест не пройден. Было бы хорошо написать мой сервис с тестами, но я не знаю, что / как я могу протестировать каждое взаимодействие, поэтому любые ссылки на тестирование языковых сервисов будут полезны.

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

Ура, Крис.

N.B. Извините, я понимаю, что это частично напыщенная речь, но я никогда не был так смущен.

1 Ответ

4 голосов
/ 01 июня 2010

Во-первых, пример пакета не с использованием MEF. По сути, все, что вы упоминаете в своем вопросе о MEF, на самом деле является не MEF, а структурой управляемых пакетов (MPF), также в разговорной речи называемой службой управляемого языка (MLS). Вы бы знали, использует ли ваше расширение MEF по двум причинам: vsixmanifest перечисляет вашу сборку как содержащую компонент MEF, и вы видите в коде атрибуты [Export] и [Import].

Самый простой способ сделать это - это использовать MEF. Поскольку у вас установлен SDK, у вас также есть шаблон для проекта классификатора редактора (под C# (or VB)->Extensibility->Editor classifier в диалоговом окне «Новый проект»). Конечно, вы можете сделать это с помощью языковой службы / colorizer / package, но кода будет значительно больше, чем эквивалентного классификатора.

Примером является решение Ook, и должен работать; если он не работает / не работает, то можете ли вы отправить мне электронное письмо (noahric at microsoft) с какими ошибками вы видите, чтобы я мог отправить электронное письмо владельцу этого образца?

В общем, вы также должны прочитать мой ответ на вопрос «Как я могу написать плагин для VS2010, используя MEF?». Здесь есть ссылки на другие ресурсы, которые должны помочь.

...