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

14

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

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

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

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

以序列化为例:我们使用Serializable属性装饰一个类。然后我们将类的实例传递给格式化程序的Serialize方法。格式化程序反映实例,检查它是否具有Serializable属性,并相应地采取行动。

现在,如果我们检查同步、标志、过时和CLSCompliant属性,那么真正的问题是:谁反映它们?至少在某些情况下,必须是编译器(和/或IDE)。因此,似乎如果我希望创建自定义属性,无论特定的消费者如何,都可以更改元素的行为,我必须扩展编译器以在编译时反映它们。

当然,这不是我的个人见解:书籍“应用.NET属性”提供了一个完整的示例,展示了如何创建自定义属性和自定义C#编译器,以在编译时反射该属性(该示例用于实现“Java风格的检查异常”)。

1
真的吗?你 真的 想要这样做吗? - Sam Holder
3
为什么不呢?这并不像“M.A. Hanin”试图做超出他领域范畴的事情。 - AMissico
@M.A. Hanin:我不会解释。如果他们感到震惊,那么他们就不应该回答这个问题。对吗? - AMissico
1
@AMissico,我认为应该用理性来解决恐惧和震惊。当人们让你感觉到“这超出了你的能力范围”,尤其是当他们不愿意理性地阐述自己的观点时,这确实不好玩,但我愿意解释自己——因为我的解释有可能会引发深入的评论。顺便说一句,我非常欣赏你的回答,我给你加了2分。 - M.A. Hanin
@M.A. Hanin:好书,我已经加入到我的阅读书单中了。我非常喜欢自定义属性,特别是在枚举类型上。 - AMissico
2个回答

4

请查看 "BuildAction Property" 和 "CustomTool Property"。

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


原始链接已失效,因此我进行了替换,但我不能确定新链接是否正确。它们似乎更或多或少与主题相关。 - StayOnTarget

2
请查看MSBuild概述。Visual Studio项目是MSBuild项目。我相信你只需要做一些小的修改就可以了。虽然我没有为编译器做过这样的操作,但我在编译后使用ILMerge进行了操作,效果非常好。合并后的程序集无缝并且甚至可以进行调试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接