是否存在将源代码转换回CodeCompileUnit的现有方法?
我们在自己的设计师中使用DesignSurface和所有出色的IDesignerHost。然后,以我们自己的定制格式保留设计的表单,并且所有这些都很好用。我们还希望将表单导出为基于文本的格式(我们已经做到了,因为它并不难)。
但是,我们还希望将该文本导入设计人员的文档中,这涉及将设计人员代码重新导入CodeCompileUnit。不幸的是,没有实现Parse方法(毫无疑问,有充分的理由)。有其他选择吗?我们不想使用标准.NET安装中不存在的任何内容(例如随Visual Studio安装的.NET库)。
我当前的想法是编译导入的文本,然后实例化表单并将其属性和控件复制到设计图对象,并仅捕获新的CodeCompileUnit,但我希望有更好的方法。谢谢。
更新:我虽然有些人可能对我们的进展感兴趣。到目前为止,还不是很好。我发现的简要概述是未实施Parse方法,因为它被认为太难了,存在开放源代码解析器来完成工作,但它们并不完整,因此不能保证在所有情况下都可以工作(我认为NRefactory是SharpDevelop项目的其中之一,并且尚未将控件从实例复制到设计器的工作。我相信这是因为尽管控件已添加到设计器图面包装的表单实例中,但设计器图面并未意识到它们的包含。我们的下一个尝试是模拟剪切/粘贴以查看是否可以解决该问题。显然,这是一个非常讨厌的解决方法,但是我们需要它起作用,因此我们将一如既往地关注替代方案。
解决方案
这不是我们要求的,但是我们可以尝试使用CodeDomComponentSerializationService类根据设计图面的当前状态生成CodeDom图。
我们使用该类在内置设计器中处理复制/粘贴功能。
我们总是可以编写自己的Cparser。这样,我们就可以确定它的完整性。
在情况下,由于不需要像智能感知这样的东西,因此仅使用解析器生成器就可以摆脱现实。
但是,即使我们用手写的方式写书,也可能不会花费我们大约一个月的时间。