我想做的事情可能甚至不值得做,但我觉得这很酷。
所以我想做的是在我的项目构建时(不仅在编译时)运行一些代码,并根据属性和通用代码分析等内容向我的类添加内容。我想要做的是动态生成的字段/属性可以通过intellisense使用,但在实际源中不可见。 原因是我可能想要生成很多它们,并将它们输出到源代码会很快变成混乱。
像这样的系统的潜在可能性就像矢量调整一样。
是否有某种类型的库可以插入我的代码?如果没有,如果有的话,最好的方法是什么?
答案 0 :(得分:1)
最明显的例子是Microsoft针对XAML文件完成的。在构建期间,将为每个XAML文件创建一个C#源文件,并将其放在obj/Debug
或obj/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类编译代码。