Visual Studio Solution通过VS SDK获取构建后如何获取回调?

时间:2014-12-16 09:56:54

标签: c# .net visual-studio visual-studio-sdk

我正在使用下面写的代码..

EnvDTE.DTE dte = (EnvDTE.DTE)Marshal.GetActiveObject("VisualStudio.DTE.12.0");
dte.ExecuteCommand("File.SaveAll"); // Saving all files before building

dte.ExecuteCommand("Build.ReBuildSolution"); // Buidling solution

我想在成功构建解决方案后才执行后续代码语句。 是否有任何回调定义通知成功/不成功构建..

1 个答案:

答案 0 :(得分:1)

首先,如果您使用的是扩展程序(加载项或程序包),请不要使用这种方式获取DTE实例,因为Marshal.GetActiveObject(...)会返回正在运行的DTE实例,并且如果你有两个VS打开的实例,你可能会得到错误的实例。正确的方法是:

其次,请参阅文章:HOWTO: Performing some action before or after a build from a Visual Studio macro or add-in

最好的方法是使用IVsBuildableProjectCfg.AdviseBuildStatusCallback方法调用IVsBuildStatusCallback.BuildEnd并检查fSuccess参数。