是否存在将源代码转换回CodeCompileUnit的现有方法?

时间:2008-09-30 23:30:39

标签: c# winforms serialization code-generation designer

我们在自己的设计师中使用DesignSurface和所有优秀的IDesignerHost优点。然后,设计的表格将以我们自己的定制格式保存,并且所有这些都非常有用。我们还希望将表单导出为基于文本的格式(我们已经完成了,因为它并不困难)。

但是,我们还希望将该文本导入设计器的文档中,该文档涉及将设计器代码重新放回CodeCompileUnit。不幸的是,Parse方法没有实现(毫无疑问,很好的理由)。还有其他选择吗?我们不想使用标准.NET安装中不存在的任何东西(比如用Visual Studio安装的.NET库)。

我目前的想法是编译导入的文本然后实例化表单并将其属性和控件复制到设计表面对象,然后捕获新的CodeCompileUnit,但我希望有更好的方法。感谢。


更新:我可能会对我们的进展感兴趣。到目前为止,还不是那么好。我发现的一个简要概述是Parse方法没有实现,因为它被认为太难了,开源解析器存在,但是它们不完整,因此无法保证在所有情况下都能工作( NRefactory是SharpDevelop项目中的一个,我相信,并且从实例到设计器的控件复制工作尚未完成。我相信这是因为虽然控件被添加到设计器表面包装的表单实例中,但设计者表面并未意识到它们的包含。我们的下一个尝试是模仿剪切/粘贴,看看是否能解决它。显然,这是一个非常讨厌的解决方法,但我们需要它的工作,所以我们会受到打击,并留意替代品。

2 个答案:

答案 0 :(得分:2)

这并不是您要求的,但您可以尝试使用CodeDomComponentSerializationService类根据设计图面的当前状态生成CodeDom图。

我们使用该类来处理内置设计器中的复制/粘贴功能。

答案 1 :(得分:2)

您总是可以编写自己的C#解析器。这样你就可以确定它的完整性。

在你的情况下,因为你不需要像intellisense这样的东西,你可能只需要使用解析器生成器就可以了。

然而,即使您手动编写了一篇文章,它也可能不会超过一个月。