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

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

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

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

我们以序列化为例:我们用 Serialized 属性修饰一个类。然后,我们将该类的实例传递给格式化程序的 Serialize 方法。格式化程序反映实例,检查它是否具有可序列化属性,并采取相应的操作。

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

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

有帮助吗?

解决方案

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

其他提示

查看 ”BuildAction 属性“ 和 ”自定义工具属性".

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top