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

M.A*_*nin 13 .net compiler-construction ide-customization visual-studio

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

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

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

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

让我们以Serialization为例:我们使用Serializable属性修饰一个类.然后,我们将类的实例传递给formatter的Serialize方法.格式化程序反映实例,检查它是否具有Seri​​alizable属性,并相应地执行操作.

现在,如果我们检查Synchronization,Flags,Obsolete和CLSCompliant属性,那么真正的问题是:谁反映了它们?至少在某些情况下,它必须是编译器(和/或IDE).因此,似乎如果我希望创建自定义属性来更改元素的行为而不管任何特定的使用者,我必须扩展编译器以在编译时反映它们.

当然,这些不是我个人的见解:书籍" Applied .NET Attributes "提供了一个完整的例子,用于创建自定义属性和自定义C#编译器,以便在编译时反映该属性(该示例用于实现"java-style"检查异常").

AMi*_*ico 2

查看“MSBuild 概述”:http://msdn.microsoft.com/en-us/library/ms171452.aspx。Visual Studio 项目是 MSBuild 项目。我相信您所要做的就是做一些小的改变。我还没有为编译器做过它,但我在编译后用 ILMerge 做了它,效果很好。无缝甚至可以调试合并的程序集。