我正在编写一个Visual Studio扩展,它允许在项目中编辑特定类型的文件。此文件用作进一步自动代码生成的描述(类似于实体框架)。
我需要在构建包含描述文件的项目之前执行代码生成。代码生成算法(当前)放在描述文件的编辑器中。
在实际构建项目之前,有没有办法挂钩构建过程以自动执行一些额外的步骤?
答案 0 :(得分:4)
您可以使用EnvDTE.Events.BuildEvents.OnBuildBegin
和OnBuildDone
。
请注意,每当您说dte.Events.BuildEvents
时,即使您仍然有一个事件监听器,您也会在后台创建一个垃圾收集的新COM对象。因此,在将事件处理程序附加到某个地方之前,将BuildEvents对象保存到某个成员变量中(以便在使用它时不会收集垃圾)。
如果您厌倦了EnvDTE,您还可以实施Microsoft.VisualStudio.Shell.Interop.IVsBuildStatusCallback
(并通过AdviseBuildStatusCallback
将其挂钩到VS):P
编辑:这两个都在UI线程上运行,但经过进一步思考后,我认为修改构建本身可能为时已晚(MSBuild可能已经发送过文件和开始异步建设)。我不确定。
答案 1 :(得分:3)
我相信如果你实现了IVsUpdateSolutionEvents3接口,
和方法
public int UpdateSolution_Begin(ref int pfCancelUpdate)
然后你有一个方法会在构建开始后通知你,并允许你取消它。
Ps,看看PyTools,它已经实现了接口,(你还需要实现IVsSolutionBuildManager3并调用必要的方法,比如AdviseUpdateSolutionEvents等)。