[英]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.