Есть ли существующий способ превратить исходный код обратно в CodeCompileUnit? - PullRequest
6 голосов
/ 01 октября 2008

Мы используем DesignSurface и все это хорошее IDesignerHost в нашем собственном дизайнере. Разработанные формы затем сохраняются в нашем собственном формате, и все это прекрасно работает. Мы также хотим экспортировать формы в текстовый формат (что мы и сделали, поскольку это не так сложно).

Однако мы также хотим импортировать этот текст обратно в документ для дизайнера, который включает в себя возврат кода дизайнера в CodeCompileUnit. К сожалению, метод Parse не реализован (по понятным причинам). Есть ли альтернатива? Мы не хотим использовать то, чего не было бы при стандартной установке .NET (например, библиотеки .NET, установленные с Visual Studio).

Моя текущая идея состоит в том, чтобы скомпилировать импортированный текст, а затем создать экземпляр формы и скопировать ее свойства и элементы управления в объект поверхности конструктора и просто захватить новый CodeCompileUnit, но я надеялся, что есть лучший способ. Спасибо.


ОБНОВЛЕНИЕ: Я думаю, что некоторые могут быть заинтересованы в нашем прогрессе. Пока что не очень хорошо. Краткий обзор того, что я обнаружил, заключается в том, что метод Parse не был реализован, потому что он был сочтен слишком сложным, существуют парсеры с открытым исходным кодом, которые выполняют свою работу, но они не завершены и, следовательно, не гарантируют работу во всех случаях Я считаю, что NRefactory - это один из проектов SharpDevelop, и копирование элементов управления из экземпляра в конструктор пока не работает. Я полагаю, что это потому, что хотя элементы управления добавляются к экземпляру формы, который обертывает поверхность дизайнера, поверхность дизайнера не знает об их включении. Наша следующая попытка состоит в том, чтобы подражать вырезать / вставить, чтобы увидеть, решит ли это это. Очевидно, это огромный неприятный обходной путь, но нам нужно, чтобы он работал, поэтому мы примем удар и будем следить за альтернативами.

Ответы [ 2 ]

2 голосов
/ 31 января 2009

Вы всегда можете написать свой собственный синтаксический анализатор C #. Таким образом, вы можете быть уверены в его полноте.

В вашем случае, потому что вам не нужно ничего, как intellisense, вы, вероятно, можете обойтись просто с помощью генератора парсера.

Однако, даже если вы написали это от руки, это, вероятно, не займет у вас больше месяца.

2 голосов
/ 11 октября 2008

Это не совсем то, что вы просили, но вы можете попытаться использовать класс CodeDomComponentSerializationService для генерации графика CodeDom на основе текущего состояния поверхности проектирования.

Мы используем этот класс для обработки функций копирования / вставки в нашем встроенном конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...