c# - 当我使用 Visual Studio 2013 保存源代码时是否可以运行 StyleCop?

标签 c# visual-studio stylecop

当我使用 StyleCop 时,我总是运行 StyleCop 菜单或构建项目。
我想在程序保存后运行 StyleCop。

可能吗?

最佳答案

不幸的是,宏已被删除,但编写加载项非常容易。首先创建一个新的 C# 插件项目(完成后,您需要将 DLL 部署到 Visual Studio AddIns 文件夹中并重新启动 VS)。

编辑生成的模板以附加到 DocumentSaved 事件:

private DocumentEvents _documentEvents;

public void OnConnection(object application,
                         ext_ConnectMode connectMode,
                         object addInInst,
                         ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    _documentEvents = _applicationObject.Events.DocumentEvents;
    _documentEvents.DocumentSaved += DocumentEvents_DocumentSaved;

}

public void OnDisconnection(ext_DisconnectMode disconnectMode,
                            ref Array custom)
{
    _documentEvents.DocumentSaved -= DocumentEvents_DocumentSaved;
}

您的 DocumentEvents_DocumentSaved 方法只需要调用正确的 VS 命令(请注意,命令名称因您使用的 Visual Studio 版本而异)。

private void DocumentEvents_DocumentSaved(Document Document)
{
    document.DTE.ExecuteCommand("Build.RunCodeAnalysisonSelection", "");
}

在这种情况下,您将仅对当前项目运行代码分析(假设它是您保存的项目,那么它也是您想要测试的项目)。此假设对于“全部保存”失败,因此您可能需要使用“Build.RunCodeAnalysisonSolution”。当然,还有很大的改进空间(例如,当发生多个接近连续保存时)。

如果您的目标是 VS 2013,那么您不应该使用 AddIn,因为它们已被弃用,取而代之的是 Package。您要做同样的事情,但您可以通过 IVsRunningDocTableEvents 收到该通知。重写 Package 中的 Initialize()(将实现 IVsRunningDocTableEvents 接口(interface))。从 IVsRunningDocumentTable 调用 AdviseRunningDocTableEvents()(通过 GetService() 获取)即可完成。

最后请注意,相同的技术也适用于任何其他事件(成功构建之后、部署之前、关闭解决方案时等)。

关于c# - 当我使用 Visual Studio 2013 保存源代码时是否可以运行 StyleCop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27942954/

相关文章:

c# - 'using' 指令应该在命名空间内部还是外部?

c# - Application.LoadComponent 的线程错误( key 已存在)

c# - 在企业库中运行时更改连接字符串

c++ - const char[] 默认函数参数

visual-studio - 从挂起更改的工作项选项卡上的列表中删除最近使用的查询

c# - Global.asax 中 Application_Start 的 StyleCop SP0100 错误

c# - Stylecop 自定义规则不显示在设置中

c# - Javascript确认消息问题

c# - 如何导航到同一解决方案中的另一个项目

c# - 在目标机器上缺少 App_global.asax.compiled