4

我正在制作一个重构工具,它可以自动处理一些处理 StyleCop 的更琐碎的代码样式。我希望我的加载项能够做的一件事(作为开发人员可以打开/关闭的可选功能)是自动调用“组织使用 -> 删除和排序”功能。这是一个简单的宏调用。

但是,我的问题是,当我遍历并递归调用解决方案中每个 .cs 非设计器文件上的宏时,这个特定的宏会在执行前检查错误。如果存在语法错误并且我的加载项开始调用该功能,它会为每个文件抛出一个对话框。

我想做的是使用与函数用于即时检查错误相同的方法,然后如果有错误会导致对话框弹出,只需弹出一次性通知并跳过调用在每个文件上。

我知道我的加载项可以检查错误列表,但是我多次发现在“删除和排序”中触发问题的错误并不总是出现在列表中。我让列表为空,然后我尝试“删除和排序”,它告诉我存在构建问题。然后我构建了解决方案,果然它失败了,错误被填充了。我看到的唯一解决方案是使用与“删除和排序”相同的功能进行事先检查。

有人知道我如何在以与“删除和排序使用”相同的方式构建之前检测编译器错误吗?

4

2 回答 2

1

我不确定您在谈论什么样的错误,我假设它们是 IntelliSense 解析器生成的错误。是的,那个解析器不是很可靠。它并不是一个成熟的 C# 解析器,它经过优化可以完成一种非常不同的工作:即使代码不完整且无法编译,也能提供上下文相关的帮助。除了等待下一个 VS 版本之外,您无法做任何事情来使其更可靠。

但令我震惊的是,您可能正在尝试解决错误的问题。关键问题是您的加载项似乎正在使用不应删除的指令进行删除。一个真正的解决方法是改进您的代码分析引擎,以便它可靠地检测真正的命名空间依赖关系。试图通过希望 IntelliSense 会抱怨来猜测哪些重要,只会让您的客户感到沮丧。

于 2010-02-20T11:51:50.327 回答
0

这看起来很老套,但除非有人能想出更好的解决方案,否则我会检查错误列表,因为它总比没有好。

此外,我想我可以尝试在“Edit.RemoveAndSort”调用周围设置一个计时器,如果它占用了一定的时间,弹出一个一次性对话框,提到它看起来像 RemoveAndSort 有问题并询问是否用户想要取消,或者至少不调用删除和排序。

于 2010-02-24T17:59:32.880 回答