C# 有没有一种现有的方法可以将源代码转换回CodeCompileUnit?

C# 有没有一种现有的方法可以将源代码转换回CodeCompileUnit?,c#,winforms,serialization,code-generation,designer,C#,Winforms,Serialization,Code Generation,Designer,我们使用设计图面和所有好的创意,在我们自己的设计师中发挥最大的作用。设计的形式,然后坚持在我们自己的定制格式和所有伟大的作品。我们还希望将表单导出为基于文本的格式(我们已经这样做了,因为这并不困难) 但是,我们还希望将该文本导入到设计器的文档中,这涉及到将设计器代码返回到CodeCompileUnit中。不幸的是,解析方法没有实现(毫无疑问,这是有充分理由的)。还有别的选择吗?我们不想使用标准.NET安装中不存在的任何东西(如随Visual Studio安装的.NET库) 我目前的想法是编译导入

我们使用设计图面和所有好的创意,在我们自己的设计师中发挥最大的作用。设计的形式,然后坚持在我们自己的定制格式和所有伟大的作品。我们还希望将表单导出为基于文本的格式(我们已经这样做了,因为这并不困难)

但是,我们还希望将该文本导入到设计器的文档中,这涉及到将设计器代码返回到CodeCompileUnit中。不幸的是,解析方法没有实现(毫无疑问,这是有充分理由的)。还有别的选择吗?我们不想使用标准.NET安装中不存在的任何东西(如随Visual Studio安装的.NET库)

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



更新:我想有些人可能对我们的进展感兴趣。到目前为止,还不太好。我发现的一个简要概述是,解析方法之所以没有实现,是因为它被认为太难了,存在着做这项工作的开源解析器,但它们并不完整,因此不能保证在所有情况下都能工作(我相信,NRefactory是SharpDevelop项目中的一个),而将控件从实例复制到设计器的过程目前还不起作用。我相信这是因为,尽管控件被添加到设计器表面包装的表单实例中,但设计器表面并不知道它们的包含。我们的下一个尝试是模拟剪切/粘贴,看看这是否解决了问题。显然,这是一个巨大的、令人讨厌的解决方案,但我们需要它工作,因此我们将采取行动,并密切关注替代方案。

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


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

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

在您的情况下,因为您不需要任何类似intellisense的东西,所以您可能只需要使用解析器生成器就可以了


但是,即使你亲自写了一封信,大概也不会花你超过一个月的时间。

我也想知道答案,但我担心没有答案。我也在寻找解决办法。我想很容易地将新函数合并到现有代码中,最好是通过解析代码文件,然后添加新成员,然后我将从合并的CodeCompileUnit创建脚本。是的,我们已经这样做了,以使源代码脱离表面,但我们想将源代码放回表面,这就是问题的根源。我希望避免做出这种努力。问题是时间——尽管需要此功能,但它的重要性不足以保证编写语言解析器所需的时间投资。不过我还在考虑。一般来说,VS代码是相当不完整的。自V7以来,它一直没有跟上语言的变化。我认为,为了您的产品,您可能应该编写自己的解析器。这是确保你能对未来语言变化做出反应的唯一方法。