一种在构建时修改类(和常规程序集)数据的方法

时间:2013-11-10 23:57:42

标签: c# code-generation

我想做的事情可能甚至不值得做,但我觉得这很酷。

所以我想做的是在我的项目构建时(不仅在编译时)运行一些代码,并根据属性和通用代码分析等内容向我的类添加内容。我想要做的是动态生成的字段/属性可以通过intellisense使用,但在实际源中不可见。 原因是我可能想要生成很多它们,并将它们输出到源代码会很快变成混乱。

像这样的系统的潜在可能性就像矢量调整一样。

是否有某种类型的库可以插入我的代码?如果没有,如果有的话,最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

最明显的例子是Microsoft针对XAML文件完成的。在构建期间,将为每个XAML文件创建一个C#源文件,并将其放在obj/Debugobj/Release文件夹中。除此之外,定义相关任务的MSBuild .targets文件经过专门配置,告诉Visual Studio生成的文件是正确的IntelliSense支持所必需的,这意味着您实际上不必显式构建项目为了让IntelliSense允许在XAML中声明的项目在项目的其他地方的C#代码中使用。

这是完全我在构建期间用于为ANTLR语法文件生成代码的方法。您可以在此处查看包含构建任务程序集和自定义.targets文件的完整示例:
https://github.com/antlr/antlrcs/tree/master/AntlrBuildTask

您应该知道,Visual Studio的某些3 rd 派对扩展完全取代了IntelliSense支持,并使用自己的代码完成实现。已知其中一些扩展不支持使用自定义代码生成器所需的MSBuild IntelliSense可扩展性功能。如果您遇到IntelliSense问题并安装了任何扩展程序,您可能会发现删除扩展程序可以解决问题。

答案 1 :(得分:0)

应用程序运行时,您应该通过CSharpCodeProvider / ICodeCompiler / CompilerParameters类编译代码。