在Visual Studio中连接到构建过程

时间:2014-04-23 11:38:16

标签: c# visual-studio visual-studio-2013 vsix vs-extensibility

我正在编写一个Visual Studio扩展,它允许在项目中编辑特定类型的文件。此文件用作进一步自动代码生成的描述(类似于实体框架)。

我需要在构建包含描述文件的项目之前执行代码生成。代码生成算法(当前)放在描述文件的编辑器中。

在实际构建项目之前,有没有办法挂钩构建过程以自动执行一些额外的步骤?

2 个答案:

答案 0 :(得分:4)

您可以使用EnvDTE.Events.BuildEvents.OnBuildBeginOnBuildDone

请注意,每当您说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等)。