背景:我想创建一个自定义VB编译器,扩展“原始”编译器,以处理我的自定义编译时属性。
问题:在我创建了自定义编译器并且拥有了可通过标准命令行界面编译VB代码的可执行文件之后,如何将此编译器与Visual Studio IDE集成?(使得按下“编译”或“构建”将使用我的编译器而不是默认编译器)。
编辑:(如果我错了,请纠正我)
从这里的反应来看,我认为这个问题有点令人震惊,所以我将进一步解释我的需求和背景: .NET为我们提供了一个称为Attributes的伟大机制。据我所知,使属性应用其预期的行为(程序集、模块、类、方法等)- 必须反映属性。因此,真正的诀窍在于在正确的位置反映和应用行为。
以序列化为例:我们使用Serializable属性装饰一个类。然后我们将类的实例传递给格式化程序的Serialize方法。格式化程序反映实例,检查它是否具有Serializable属性,并相应地采取行动。
现在,如果我们检查同步、标志、过时和CLSCompliant属性,那么真正的问题是:谁反映它们?至少在某些情况下,必须是编译器(和/或IDE)。因此,似乎如果我希望创建自定义属性,无论特定的消费者如何,都可以更改元素的行为,我必须扩展编译器以在编译时反映它们。
当然,这不是我的个人见解:书籍“应用.NET属性”提供了一个完整的示例,展示了如何创建自定义属性和自定义C#编译器,以在编译时反射该属性(该示例用于实现“Java风格的检查异常”)。