代码之家  ›  专栏  ›  技术社区  ›  M.A. Hanin

将自定义编译器与Visual Studio IDE集成

  •  13
  • M.A. Hanin  · 技术社区  · 15 年前

    背景 :我想创建一个自定义的VB编译器,扩展“原始”编译器,以处理我的自定义编译时属性。

    问题 :在我创建了自定义编译器,并且有了一个能够通过标准命令行界面编译VB代码的可执行文件之后,如何将此编译器与Visual Studio IDE集成?(这样按“compile”或“build”将使用我的编译器而不是默认编译器)。

    编辑 (如果我错了,请纠正我)

    从这里的反应来看,这个问题有点令人震惊,所以我将进一步解释我的需求和背景: .NET为我们提供了一种称为属性的强大机制。据我所知,使属性将其预期行为应用于属性化元素(程序集、模块、类、方法等)-必须反映属性。所以这里真正的技巧是在正确的地方反射和应用行为。

    让我们以序列化为例:我们用可序列化属性修饰一个类。然后,我们将类的一个实例传递给格式化程序的序列化方法。格式化程序对实例进行反射,检查它是否具有可序列化属性,并相应地执行操作。

    现在,如果我们检查同步、标志、过时和符合CLS的属性,那么真正的问题是:谁在考虑它们?至少在某些情况下,它必须是编译器(和/或IDE)。因此,如果我希望创建自定义属性来改变元素的行为,而不考虑任何特定的使用者,那么我必须在编译时扩展编译器以反映它们。

    当然,这些不是我个人的见解:这本书” Applied .NET Attributes “提供一个完整的创建自定义属性的示例,以及自定义C语言编译器,以在编译时反映该属性(该示例用于实现“Java风格检查异常”)。

    2 回复  |  直到 7 年前
        1
  •  2
  •   AMissico    15 年前

    请访问“msbuild概述” http://msdn.microsoft.com/en-us/library/ms171452.aspx . Visual Studio项目是MSBuild项目。我相信你所要做的就是做一些小改动。我不是为编译器做的,但编译后我用ilmerge做的,它工作得很好。无缝的,甚至可以调试合并的程序集。

        2
  •  3
  •   StayOnTarget Charlie Flowers    7 年前

    退房 BuildAction Property “和” CustomTool Property “。

    几年前,我读了一篇关于创建自定义编译器、注册它以及设置这些属性的优秀文章。我现在找不到这篇文章,但这应该能让你开始。