Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild 是否在保存后为Visual Studio 2015自动生成?_Msbuild_Visual Studio 2015 - Fatal编程技术网

Msbuild 是否在保存后为Visual Studio 2015自动生成?

Msbuild 是否在保存后为Visual Studio 2015自动生成?,msbuild,visual-studio-2015,Msbuild,Visual Studio 2015,当使用VisualStudio时,我希望它能够持续地构建我的项目。也就是说,在每次保存之后,开始构建。我倾向于使用大型(35+个项目)解决方案,因此在启动应用程序时,一切都是最新的可以节省时间 Roslyn会在您键入时向您提供编译器错误,但它实际上并没有运行完整的构建过程,这意味着您仍然需要告诉VS进行构建,并等待它在调试或运行测试之前完成 Redgate曾经做过这种后台编译,它确实很有用,但现在已经停止了,因为“Visual Studio 2015将引入微软新的Roslyn编译器,我们认为这些

当使用VisualStudio时,我希望它能够持续地构建我的项目。也就是说,在每次保存之后,开始构建。我倾向于使用大型(35+个项目)解决方案,因此在启动应用程序时,一切都是最新的可以节省时间

Roslyn会在您键入时向您提供编译器错误,但它实际上并没有运行完整的构建过程,这意味着您仍然需要告诉VS进行构建,并等待它在调试或运行测试之前完成

Redgate曾经做过这种后台编译,它确实很有用,但现在已经停止了,因为“Visual Studio 2015将引入微软新的Roslyn编译器,我们认为这些改进使.NET Demon变得多余。”


在IDE中保存文件或修改项目后,是否有让Visual Studio 2015自动启动生成的选项或扩展名?

Visual Commander有一个扩展名示例。您可以用DTE.ExecuteCommand(“Build.BuildSolution”)替换Cppcheck

基于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);
    }
}

我开始开发一个新的开源扩展名BuildOnSave,它就是这样做的:它在保存文件时构建当前的解决方案或启动项目

可在Visual Studio扩展库中找到:


也许你可以试一试。我非常感谢您的反馈。

这正是我需要的。谢谢另外,VisualCommander通常看起来非常有用。嘿,我上周创建了一个扩展,用上面的方法构建解决方案,但我认为用DTE方法构建解决方案会导致在构建运行时键入光标时出现暂停和焦点窃取问题,所以我本周末尝试了另一种方法,而且效果很好。它现在在画廊里,我正在寻找反馈:@Armin我来试试!如果您将此作为一个答案添加,您更有可能将流量增加到您的扩展,您可以给您投票:).NET Demon也会更快,因为它只会重建发生更改的项目。看起来不错,但是在包含多个项目的解决方案中,我遇到以下错误:-->BuildOnSave:Project:CTM-API,配置:调试任何CPU-------C:\CyberGym\Projects\Dev\CTM\CTM.sln.metaproj:错误MSB4057:项目中不存在目标“CTM-API”。已完成构建项目“CTM.sln”--失败BuildOnSave:0成功,0失败==========“但是在VS中手动构建项目时,一切都很好。不管怎样,谢谢你报道这个问题。我目前正在测试一个新版本,它可能已经修复了这个问题。如果可能的话,您可以尝试从的最新版本,并向github问题跟踪者报告更多问题。那太好了!您好,此扩展是否仅在解决方案没有错误时生成,或者无论每次保存时解决方案/项目的状态如何,它都会尝试生成?每次保存文件时它都会生成。仅在Intellisense未发现任何错误时构建可能是一个有趣的添加选项。