使用Visual Studio时,我希望它能够持续构建我的项目。也就是说,在每次保存之后,启动构建。我倾向于使用大型(35+项目)解决方案,因此让所有内容都保持最新可以节省我启动应用程序的时间。
Roslyn会在您键入时给出编译器错误,但它实际上并没有运行完整的构建过程,这意味着您仍需要告诉VS构建并等待它在调试或运行测试之前完成。
Redgate' s .Net Demon曾经做过这种后台编译,它确实非常有用,但它已经停止了,因为" Visual Studio 2015将引入微软'新的Roslyn编译器,我们认为这些改进使.NET Demon变得多余。"
是否有选项或扩展可让Visual Studio 2015在保存文件或在IDE中修改项目后自动启动构建?
答案 0 :(得分:6)
我开始开发一个名为BuildOnSave的新开源扩展,并且正是这样做的:它在保存文件时构建当前的解决方案或启动项目。
它可以在Visual Studio扩展库中找到:https://visualstudiogallery.msdn.microsoft.com/2b31b977-ffc9-4066-83e8-c5596786acd0
可能你可以尝试一下。我非常感谢您的反馈。
答案 1 :(得分:2)
Visual Commander有runs Cppcheck on the saved file的示例扩展名。您可以用 DTE.ExecuteCommand(“Build.BuildSolution”)替换Cppcheck;
答案 2 :(得分:0)
以Sergey Vlasov的回答为基础,这是Visual Commander扩展的修改版本;
using EnvDTE;
using EnvDTE80;
public class E : VisualCommanderExt.IExtension
{
private EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.DocumentEvents documentEvents;
private EnvDTE.BuildEvents buildEvents;
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
documentEvents = events.DocumentEvents;
buildEvents = events.BuildEvents;
buildEvents.OnBuildProjConfigDone += OnBuildProjectDone;
documentEvents.DocumentSaved += OnDocumentSaved;
}
public void Close()
{
documentEvents.DocumentSaved -= OnDocumentSaved;
buildEvents.OnBuildProjConfigDone -= OnBuildProjectDone;
}
private void OnDocumentSaved(EnvDTE.Document doc)
{
if(doc.Language == "CSharp")
{
var sb = DTE.Solution.SolutionBuild;
sb.Build();
}
}
private void OnBuildProjectDone(string project, string projectConfig, string platform, string solutionConfig, bool success)
{
//OutputString("Project " + project + " " + (success ? "build" : "failed to build"));
}
private void OutputString(string line)
{
GetOutputPane().OutputString(line + System.Environment.NewLine);
}
private EnvDTE.OutputWindowPane GetOutputPane()
{
string cppcheckPaneName = "VCmd";
foreach (EnvDTE.OutputWindowPane pane in
DTE.ToolWindows.OutputWindow.OutputWindowPanes)
{
if (pane.Name == cppcheckPaneName)
return pane;
}
return DTE.ToolWindows.OutputWindow.OutputWindowPanes.Add(cppcheckPaneName);
}
}