O. *_*per 11 .net code-generation codedom
我正在寻找与语言无关(至少在某些范围内)源代码生成的System.CodeDom命名空间,并且我发现了一些阻止使用的信息CodeDom.
我认为这篇早期博客文章中描述的一些遗漏现在已经修复,而且CodeDom似乎没有提供创建switch语句的方法的事实仍然允许 - 性能较差? - 没有弄乱生成类型的公共接口的变通方法.这同样适用于自动C#属性和集合初始值设定项.
但是,其他遗漏实际上无法解决,例如无法创建终结器,无法声明扩展方法,或者缺乏对通用引用类型约束的直接支持.
请注意,CodeSnippetTypeMember通过任何其他方式使用或注入文字源代码片段的建议解决方案并不令人满意,因为它们不是与语言无关的 - 从而消除了整个使用点CodeDom而不是String.Format文字代码片段.
最后,甚至在这个SO问题中建议"CodeDom是失败的,表达树(或者更确切地说是"语句"树)是前进的方式" - 尽管没有任何解释如何从表达式树中实际获取任何源代码(除了不能用表达式树声明类的限制之外.
CodeDom仍然是生成源代码的首选方法,还是当前的BCL提供了一个我想不到的名称的任何模糊替换?
我认为 CodeDom 仍然是当今 BCL 中最好的解决方案,但是:Roslyn 项目已经走了很长一段路,并且已经推出了多个 CTP。目标是使编译器作为服务提供,并且它将通过简单的 API 启用代码生成和代码检查场景。
看看它,如果您可以为您的项目使用预发布位:Roslyn CTP。这是一个相关的(虽然已经过时,但仍然是一些很好的信息)StackOverflow 问题:Microsoft Roslyn vs. CodeDom。最后,一篇讨论使用 Roslyn 进行代码生成的文章:Code Generation in .NET with the Roslyn CTP
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |