12

背景:我想创建一个自定义的VB编译器,延长了“原始”的编译器,来处理我的自定义编译时属性。集成自定义编译器与Visual Studio IDE

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

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

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

让我们序列化,例如:我们装修类Serializable属性。然后,我们将该类的一个实例传递给格式化程序的Serialize方法。格式化程序反映实例,检查它是否具有Seri​​alizable属性,并相应地执行操作。

现在,如果我们考察同步,旗,过时和CLSCompliant属性,那么真正的问题是:谁在他们身上体现?至少在某些情况下,它必须是编译器(和/或IDE)。因此,如果我希望创建改变元素行为的自定义属性而不管任何特定的使用者,我必须扩展编译器以在编译时反思它们。

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

+1

真的吗?你真的想这么做吗? – 2010-04-13 10:59:11

+3

为什么不呢?这并不是说“M.A.哈宁”试图在他的领域之外做点什么。 – AMissico 2010-04-13 11:04:27

+0

@ M.A。哈宁:我不会解释。如果他们感到震惊,那么他们不应该回答这个问题。正确? – AMissico 2010-04-13 11:47:47

回答

2

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

3

退房“BuildAction的房产”和“地产CustomTool”在http://msdn.microsoft.com/en-us/library/0c6xyb66(VS.80).aspx

几年前,我读了有关创建自定义的编译器,对其进行注册,并设置这些属性的优秀文章。我现在找不到这篇文章,但这应该让你开始。

+1

+1,用于集成Mozilla MIDL编译器。 – MSalters 2010-04-13 12:20:46

相关问题