Существует ли существующий способ превратить исходный код обратно в CodeCompileUnit?

StackOverflow https://stackoverflow.com/questions/155586

Вопрос

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

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

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


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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top