有没有一种现有的方法可以将源代码重新转换为CodeCompileUnit

本文关键字:新转换 源代码 转换 CodeCompileUnit 方法 一种 有没有 | 更新日期: 2023-09-27 17:47:22

我们在自己的设计器中使用DesignSurface和所有好的IDesignerHost优点。然后,设计的形式会以我们自己的定制格式保留下来,并且效果很好。我们还希望将表单导出为基于文本的格式(我们已经这样做了,因为它并不难)。

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

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


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

有没有一种现有的方法可以将源代码重新转换为CodeCompileUnit

您始终可以编写自己的 C# 解析器。这样您就可以确保它的完整性。

在您的情况下,因为您不需要像智能感知这样的东西,所以您可能只需使用解析器生成器就可以侥幸逃脱。

然而,即使你手写一个,也可能不会超过一个月

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

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