2

我想做的这件事可能甚至不值得做,但我认为它会很酷。

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

像这样的系统的潜在可能性将是向量混合之类的东西。

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

4

2 回答 2

1

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

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

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

于 2013-11-11T00:31:53.513 回答
0

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

于 2013-11-11T00:21:18.573 回答