Повторная вставка XML-комментариев в дерево исходных файлов C# из автоматически сгенерированных файлов [assembly].xml

Моя ситуация:
Итак, на прошлой неделе я декомпилировал сборку .NET с помощью ILSpy в C#; с тех пор я вложил массу труда в обработку файлов/проекта и т. д., чтобы все они снова работали правильно (было много мелких ошибок [в основном вызванных процессом генерации кода ILSpy] и случайных проблем, и я' я чинил их на ходу). Теперь я в нескольких дюймах от своей цели, финишная черта уже видна!

Но, о чудо: я только что понял, что все XML-комментарии отсутствуют. >.‹

Я немного поискал и смог найти файл .xml intelli-sense со всеми комментариями, сгенерированными Visual Studio внутри.

Что я хотел бы сделать:
Я ХОЧУ скопировать эти комментарии из сгенерированного XML-файла Intelli-Sense обратно в исходные файлы (конечно, в автоматическом режиме, поскольку существует около 5000 классов в этой сборке).

Мой вопрос:
Как мне поступить? Существуют ли какие-либо инструменты, которые могут помочь мне автоматизировать эту задачу?


person BrainSlugs83    schedule 06.06.2013    source источник
comment
Вы можете сделать это с помощью парсера C#. В зависимости от уровня владения C# (2, 3, 4, 5) вы можете, например, выбрать грамматику ANTLR. Вы также можете попробовать Microsoft Roslyn, но это неполная функция.   -  person Simon Mourier    schedule 12.06.2013
comment
Да, я надеялся, что мне не придется полагаться на написание собственного приложения; должно быть что-то, что кто-то уже построил — я не могу быть первым, кто столкнется с этой проблемой. :-/   -  person BrainSlugs83    schedule 13.06.2013


Ответы (2)


Вы можете использовать Roslyn CTP для C#, чтобы создать инструмент, который будет повторно вставлять комментарии в исходные файлы. (http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx) Roslyn создает древовидную структуру кода C#, которой можно управлять программно, а затем записывать обратно в файл.

person John Atwood    schedule 17.06.2013
comment
Это на самом деле очень круто. Я, возможно, придется изучить это! Хотя, я предполагаю, что форматирование исчезло, и, возможно, существующие комментарии тоже, нет? Это сделало бы это не вариант. Но все равно очень круто, ново и блестяще! :D - person BrainSlugs83; 18.06.2013

Поскольку файлы кода создаются с помощью инструмента (ILSpy), стиль кода и форматирование (пробелы и отступы) будут одинаковыми почти для каждого файла кода. Что бы я сделал, это

  1. проверьте, не противоречит ли закону декомпиляция этой библиотеки классов 5000+,
  2. написать простой синтаксический анализатор для анализа файлов кода и поиска определений классов/методов/свойств
  3. проверить, совпадает ли то, что я нашел, с тем, что есть в xml
  4. Если все в порядке, я бы скопировал найденные теги xml в их новую позицию в файлах кода, поскольку теперь я знаю позиции определений в файле.

PS: просто напоминание, чтобы упростить замену/вставку строк, всегда выполняйте вставку снизу файла в начало файла. таким образом, всякий раз, когда вы вставляете строку, индексы других вставляемых строк останутся прежними.

person Erdogan Kurtur    schedule 12.06.2013
comment
К сожалению, не все файлы имеют одинаковый формат -- опять же -- было сделано много изменений -- по некоторым файлам мне пришлось получить второе мнение от Reflector и т. д. -- Многие файлы я переформатировал, добавил области, и т. д. +1 за комментарий о проверке на законность (№ 1 выше), а также за напоминание, которое вы разместили внизу, о вставке строк, считая снизу вверх. Кроме того, уже некоторое время приходилось писать автоматический парсер. назад, чтобы исправить сотни предупреждений в различных файлах кода, и вся эта вставка снизу вверх оказалась очень удобной. - person BrainSlugs83; 13.06.2013
comment
О, еще одна хромота: Примечание: это предварительная версия технологии, и в ней есть известные проблемы. Хотя форма общедоступного API завершена, на данный момент реализовано только подмножество языков VB и C#. - person BrainSlugs83; 18.06.2013