如何在不编译项目的情况下获取类的元数据

Pau*_*ema 8 c# visual-studio vs-extensibility dataobjects.net

在我们的项目中,我们使用了大量的T4代码生成.我们使用一个名为DataObjects.Net的X-Tensive ORM.我们有点鸡蛋问题.在我们使用程序集的元数据生成代码之前,我们需要编译ORM的类.然后,当生成代码时,我们可以再次编译模型,但现在与生成的代码(部分类)组合.如果没有生成的代码,则无法编译模型类中的大多数自定义代码.

我们如何解决它是在VS2013中有一个名为"模型"的单独配置.在此配置中,存在"条件编译符号"调用"JUSTMODEL".在没有生成代码的情况下不编译的所有代码都放在#if!JUSTMODEL #endif编译器指令之间,这导致不为"模型"配置编译此代码.

这有点单调乏味.我们已经创建了一个可扩展的应用程序来自动执行此过程,但运行过程会越来越耗费时间.

现在我想知道是否有可能获得Model程序集的元数据而不通过某种扩展性API构建程序集.我在Visual Studio中看到很多工具,它们理解编辑器中加载的类并给我一些反馈(比如intellisense).

Pau*_*ema 7

有比NRefactor更好的方法.我在Visual Studio中发现了CodeModel.它为我提供了生成代码所需的所有元数据.你可以在这里找到很多关于如何在网上实现这一点的细节:

  1. 微软
  2. 有形

和许多其他地方.由于数据的动态特性,编码与C#有点不同,但当你掌握它时,它非常容易且非常强大.