c# - 我可以让我的代码在 Visual Studio“清洁解决方案”命令之后直接运行吗?
问题描述
我正在创建我的第一个 Visual Studio 扩展,如果我可以在 Visual Studio“清洁解决方案”命令完成执行后立即运行我的代码,那么一切都会很完美。
我找到了EnvDTE._dispBuildEvents_Event.OnBuildDone
,但似乎找不到它的表弟OnCleanDone
。
这样的事件真的存在吗?或者,我可以采取不同的方法吗?
谢谢各位大侠!
解决方案
结果Clean Solution
被认为是 a BuildEvent
,因此会触发EnvDTE._dispBuildEvents_Event.OnBuildDone
。
您需要做的就是检查 if parameter 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); } } }
推荐阅读
- python - 在python中找到字典中所需最小值以上的最小总和
- android - 我可以安全地为特定风格包含一个 actions.xml 文件并为其他风格省略它吗?
- shell - 运行 shell 脚本时请求密码
- ios - iOS 请求权限对话框未显示在屏幕录制或快速视频上
- python - 如何从字符串中删除方括号?
- javascript - 如何从 Redux 状态中删除特定项目?
- c - 无法获取所需查询的数据
- ios - SwiftUI 将 @Published var 从一个 ObservableObject 映射到另一个
- rust - 对迭代器进行分区时,Vec 没有实现特征 Extend
- c++ - C++、CMake 和 Xcode 符号导航器