在.NET开发领域,SharpDevelop是一个成熟的开源IDE,它提供了丰富的功能,对于许多开发者来说,它正逐渐成为Visual Studio的替代品。本文将探讨如何在SharpDevelop中开发插件,以实现代码注释功能,并探讨团队协作中的一些挑战和解决方案。
在个人开发场景中,SharpDevelop提供了多种与代码交互的功能。然而,在专业开发中,团队协作是最普遍的开发场景。在工作场所,有多个自定义的应用生命周期管理(ALM)应用程序和插件,这些插件旨在填补独特业务需求的空白。本文将介绍其中一个插件,以便在开源社区中使用。
假设最近运行了Microsoft的FXCOP工具,该工具用于检查代码是否符合安全、全球化、可移植性等各种规则。FXCOP生成了许多警告和错误,需要处理这些信息以改进代码库,但这里有一些问题无法解决。
首先,尽管该工具以XML格式生成警告和错误,SharpDevelop在IDE中报告这些信息,但当重建项目时,会丢失所有这些信息。在Carbonfrost,都有自己的解决方法。有些人通过打印出几十页的错误消息来解决这个问题,以便修复它们。虽然有点过时,但更喜欢这种方法,因为实际上更喜欢纸张,在上面划线和打勾,而不是网页和长时间的会议。然而,不久之后,公司安装了新的纸张配额,所以这个想法不再可行。其他人编写脚本和其他构建自动化工具来生成网页和数据库。这一切都相当繁琐,最糟糕的是,它使与IDE脱节,使生产力降低。
其次,即使有错误消息,代码元素也会移动。因此,随着对代码的修改,行号很快就变得毫无意义。将FXCOP数据直接关联到源代码比仅仅获取报告要复杂得多。
第三,如何向同事和其他人表明已经完成了工作?在代码库中进行更改的大部分价值在于传达是如何以及为什么进行更改的。在Carbonfrost,为此专门构建了一个外部IDE。因此,同事可以使用Visual Studio,而可以使用SharpDevelop,其他人可以使用文本编辑器。通过这个次要IDE和一些内部Web应用程序进行沟通。
SharpDevelop有一个结构良好的DOM,用于与代码交互,它模拟了与之交互的每个类、方法等。所以从这里开始。DOM很有用,因为它在很大程度上消除了语言特定的行为,并为与源代码交互提供了一个结构化的模型。这使得重构和其他事情成为可能。在模型中,将数据“附加”到DOM元素上,以便如果一个类被移动到一个新的源文件,数据就会附加到它上面。正如现在可以想象的,将FXCOP的数据纳入这个附加模型,这使能够保留FXCOP报告的意义。
当将数据附加到代码元素时,称之为“注释”。注释与代码元素、项目或解决方案相关联,注释支持历史记录。例如,可以更改注释的各种字段并添加新的评论,注释历史将被保留。这超出了“TODO”和“FIXME”代码注释的范围,因为它们与代码是分开的。注释很有用,因为它们在语义上附加到代码DOM元素上,是源代码和项目的元数据的一部分。理论上这意味着数据可以通过其他机制(如错误跟踪器)共享,即使文件名更改或代码元素重命名,数据也将保持其意义。
插件被打包为一个单独的文件。这个文件实际上是一个简单的ZIP文件,包含一个清单文件、DLL和资源。文件的扩展名是*.sdaddin。首先,解压缩本文附带的文件。它包含源代码和*.sdaddin文件。如果已经安装了SharpDevelop,应该通过双击桌面上的*.sdaddin文件来安装插件。这在另一篇关于SharpDevelop插件的文章中解释得非常好。
将注释存储在一个名为
对于那些在看到足够多的漂亮图片之前不读文章的人(有罪!),这一节是为准备的。没有一篇文章是完整的,没有免费的截图,所以它们在这里。不会花太多时间解释它是如何工作的,但这里是它的精髓。插件引入了一个新的面板,称为注释库。在这里,显示每个注释。有三个按钮用于添加注释、删除注释或导航到已经包含注释的元素。
插件还添加了新的菜单选项。有些是添加到项目面板的:一个类似的菜单被添加到类面板。这些项目允许选择一个类或类成员,并“添加注释”或“显示注释”。还有一个命令将FXCOP输出转换为注释。不过,首先使用内置命令“使用FXCOP检查”。
本文开头的插图显示了添加注释时将看到的屏幕。这个对话框允许选择一个任意的解决方案和状态级别,输入评论,并选择一个任意的代表性图标。
诚然,注释库并不明显,因为必须通过类或项目面板添加注释。考虑过自己实现类浏览器的实现,或者创建一个显示所有有注释元素的次级面板,但这些都是大工程,会复制很多代码。
还有限制在下拉菜单中显示的类和项目注释的数量。定期以安全的方式保存注释,以防止环境崩溃时丢失它们。这应该在某种程度上防止注释文件损坏或部分数据丢失。备份文件保存在
尽管支持向命名空间添加注释,但不能这样做,因为类浏览器没有为命名空间暴露菜单。目前,还有一个hack让注释库与类浏览器交互。让画廊的某些部分与它工作的代码也是hack,所以认为如果类浏览器更改,它将无法很好地版本。也没有在SharpDevelop "Montferrer"上测试这个。在CodePlex上的SharpDevelop+Community网站上,会发现很多其他扩展这个的机会。