繁体   English   中英

我可以让我的代码在 Visual Studio“清洁解决方案”命令之后直接运行吗?

[英]Can I get my code to run directly after the Visual Studio "Clean Solution" command?

我正在创建我的第一个 Visual Studio 扩展,如果我可以让我的代码在 Visual Studio“清洁解决方案”命令完成执行后立即运行,一切都会很完美。

我找到了EnvDTE._dispBuildEvents_Event.OnBuildDone ,但似乎找不到它的堂兄OnCleanDone

这样的事件真的存在吗? 或者,我可以采取不同的方法吗?

谢谢各位大侠!

原来Clean Solution被认为是BuildEvent ,因此会触发EnvDTE._dispBuildEvents_Event.OnBuildDone

您需要做的就是检查参数Action == vsBuildAction.vsBuildActionClean

我的完整解决方案如下(有两个备注):

  • 我收到警告“一个或多个扩展是使用已弃用的 API 加载的”,所以我有一些工作要做,一旦我修复了它,我就会更新这个代码片段。 也许命名约定和缺乏泛型应该表明我正在以一种过时的方式这样做👴

  • 如果我不保持对DTE.Events.BuildEvents的主动引用,则OnBuildDone不会触发。 我还不知道为什么。

     public sealed class OnCleanSolutionDoneExtension : Package { protected override void Initialize() { base.Initialize(); this.BuildEvents.OnBuildDone += OnBuildDone; } void OnBuildDone(vsBuildScope scope, vsBuildAction action) { if (action == vsBuildAction.vsBuildActionClean) { // 💰 } } private BuildEvents BuildEvents { get { if (this.buildEvents == null) { this.buildEvents = this.DevelopmentToolsEnvironment.Events.BuildEvents; } return this.buildEvents; } } private BuildEvents buildEvents; private DTE DevelopmentToolsEnvironment { get { return this.GetService(typeof(DTE)) as DTE; } } protected override void Dispose(bool disposing) { try { if (disposing) { this.buildEvents.OnBuildDone -= OnBuildDone; GC.SuppressFinalize(this); } } finally { base.Dispose(disposing); } } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM