Обновление проектов при изменении файлов
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.02.10 07:13
Оценка:
Всем привет.

Для полноценной поддержки макроса Resource
Автор: VladD2
Дата: 09.02.10
в VS Integration потребовалось захардкодить обновление дерева типов (т.е. перечитывание всег проекта) при изменении одного из .ResX-файлов.

Немного пояснений...
Макрос Resource генерирует класс-обртеку для ресурсного файла. Более деатальная информация о макросе достуна по ссылке.
Так вот, макрос Resource является мкро-атрибутом отрабатывает в момент формирования дерева типов.
Формировние дерева типов осуществляется только при изменении кода вне метода (т.е. описания типов и их членов). Таким образом, если макрос зависит, скажем от содержимого ресурсного файла (как в случае с Resource), то он не запускается при изменении файла от которого он зависит.

В случае с макросом Resource я сделал прямолинейного решение. Для всех .ResX-файлов добавленных в проект подключается объект наблюдатель (watcher) который при изменении файла выдает запрос на перестроение дерева типов.

Проблема в том, что это хардкодинг. Он не будет работать для других видов файлов.

Внимание, вопрос!

Как лучше поступить, чтобы обеспечить более универсальное решение.

Первое что приходит на ум — это подключать наблюдателей ко всем файлом не относящимся к коду (т.е. н .n-файлами). Но не уверен, что это разумное решение, так как оно может привести к нежелательному перестроениею дерева типов (а это в больших проектам может занимать несколько секунд).

Второе решение — разместить где-то список расширений файлов которые требуют обновления дерева типов при собственном изменении. Но, скажем, файлы с расширением XML могут содержать совршенно разные данные. Какие-то могут требовать изменения дерева типов, а какие-то нет.

Так же можно попробовать сделать некоторое свойство для файла (отображаемое в IDE) и предложить пользователю самостоятельно переключать его. Если такое свойство будет включено, то производить перестроение дерева при записи этого файла. Но насколько это будет удобно? Ведь следить за свойствами файлов вручную не самое приятное занятие. К тому же об этом можно просто не знать.

Кто что думает по этому поводу? Как лучше поступить? Может есть еще какие-то идеи?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.