“有什么行业吗?”;标准;用于c#中的高级元编程?

“有什么行业吗?”;标准;用于c#中的高级元编程?,c#,.net,metaprogramming,preprocessor,C#,.net,Metaprogramming,Preprocessor,在不同的项目中,我时不时地会遇到C#项目中的元编程情况,这种情况无法用泛型来解决,并且会受益于更强大的元编程工具。我通常采用的解决方案要么是解决反射问题,要么是采用C++/cli,要么是引入自定义xml/xslt编译器步骤 这是否反映了C#社区通常采用的方法,或者是否有一种值得采用的方法,例如广泛使用的第三方预处理器,我不知道 我不是在要求产品推荐,我是在问一个针对这个常见问题的公认的通用解决方案。“不,没有”可能是正确的答案。不,没有。主要是因为这是一个边缘领域。不是说这没用,只是说90%到9

在不同的项目中,我时不时地会遇到C#项目中的元编程情况,这种情况无法用泛型来解决,并且会受益于更强大的元编程工具。我通常采用的解决方案要么是解决反射问题,要么是采用C++/cli,要么是引入自定义xml/xslt编译器步骤

这是否反映了C#社区通常采用的方法,或者是否有一种值得采用的方法,例如广泛使用的第三方预处理器,我不知道


我不是在要求产品推荐,我是在问一个针对这个常见问题的公认的通用解决方案。“不,没有”可能是正确的答案。

不,没有。主要是因为这是一个边缘领域。不是说这没用,只是说90%到95%的人根本不做

有两种技术被“广泛”使用(部分原因是某些.NET工具(主要是在EntityFramework中)确实使用了它们):

我想说,在使用案例中,95%是T4,这基本上是旧的EF4编辑器,现在慢慢地被各种API的客户端生成器所取代-是的,元编程是如此罕见。我觉得这有点遗憾。我有时会使用代码生成器(odata,当年基于T4的ASP.NET路由),但在大多数情况下,其他开发人员都会睁大眼睛看它,甚至从来没有听说过这个概念。羞耻


因此,绝对没有标准。

这是一个公认的差距,多年来一直被搁置,因为.NET有非常好的运行时反射/emit API,允许运行时元编程解决方案;但是,这有多个问题,包括:

  • 复杂性
  • 启动时间
  • 安全影响
  • 不适用于所有场景(某些运行时/平台禁止运行时发出)
  • IL链接器删除“未使用”的代码时出现问题(因为在构建时没有任何内容涉及这些API,但在运行时它们通过运行时反射/发射使用)
  • 正因为如此,在C#9的时间框架内(但不是特定于C#9),“生成器”看起来最终将成为一个“东西”。这提供了一个基于Roslyn的构建时元编程层,可以以类似于今天第三方库如何发布“分析器”的方式进行扩展(生成器和分析器基本相似)


    它可能是您正在寻找的“行业标准”,但它还处于初级阶段

    在.NET中使用元编程有很多方法

    • 编译时工具:PostSharp、Fody等
    • 运行时工具:Castle DynamicProxy、Unity拦截等
    • 代码生成工具:T4,源代码生成器
    但没有一个是标准的


    也考虑切换到不同的编程语言,例如Nemerle。它是一种支持宏的语言。在我个人看来,这是元编程的理想选择。

    广泛使用的第三方预处理器
    -?也许?