我正在使用下面写的代码..
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
我想在成功构建解决方案后才执行后续代码语句。 是否有任何回调定义通知成功/不成功构建..
答案 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参数。