连接到 Visual Studio 中的构建过程

Spo*_*ook 5 c# visual-studio vs-extensibility vsix visual-studio-2013

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

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

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

Ert*_*maa 5

我相信如果你实现IVsUpdateSolutionEvents2接口,

和方法

public int UpdateSolution_Begin(ref int pfCancelUpdate)
Run Code Online (Sandbox Code Playgroud)

然后,您有一个方法可以在构建开始后通知您,并允许您取消它。

Ps,看看PyTools,它已经实现了接口,(您还需要实现IVsSolutionBuildManager3并调用必要的方法,例如AdviseUpdateSolutionEvents等等)。


Cam*_*ron 5

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

请注意,每次您说dte.Events.BuildEvents要在幕后创建一个新的 COM 对象时,即使您仍然有一个事件侦听器,该对象也会被垃圾收集。因此,在将事件处理程序附加到它之前,请将 BuildEvents 对象保存到某个成员变量中(这样在使用它时就不会被垃圾收集)。

如果您厌倦了 EnvDTE,您也可以实现Microsoft.VisualStudio.Shell.Interop.IVsBuildStatusCallback(并通过将其挂接到 VS 中):PAdviseBuildStatusCallback

编辑:这两个都在 UI 线程上运行,但经过进一步思考,我认为此时修改构建本身可能为时已晚(MSBuild 可能已经发送了文件并开始异步构建)。我不知道。