gpt4 book ai didi

visual-studio - 当某些内容无法编译时,使 Visual Studio (Express) 停止编译

转载 作者:行者123 更新时间:2023-12-04 11:16:34 25 4
gpt4 key购买 nike

如果一个项目无法构建,默认情况下,Visual Studio 会继续尝试构建依赖于该项目的所有其他项目,因此会出现愚蠢的错误,因为这些其他项目现在正在针对过时的二进制版本进行构建。

我怎样才能改变这种行为,并让它在失败时停止?

例如,假设我有一个名为 MyApp.Core 的库项目和一个名为 MyApp 的可执行项目。 MyApp 调用 MyApp.Core 中的一个方法。假设我向该方法添加了一个新参数,然后尝试构建,但我无意中在 MyApp.Core 中引入了一个无关的编译器错误。当我构建时,Visual Studio 将:

  • 尝试构建 MyApp.Core,由于编译器错误而失败。由于构建失败,磁盘上的 MyApp.Core.dll 保持不变。
  • 继续尝试针对旧版本的 MyApp.Core.dll 构建 MyApp,并报告编译器错误,因为它传递的参数比旧 DLL 中的方法预期的要多。
  • 在错误窗口顶部报告第二批错误,因此很难找到实际问题。

  • Make自 1977 年以来,这个问题就得到了解决:当它意识到它不能 build 时,它就停止 build 。我使用过的所有其他构建系统和 IDE 也足够聪明,可以止步于失败的事业。但是 Visual Studio 还没有完全 catch 1977 年的技术复杂程度。

    Visual Studio Hacks”一书在其有关宏的部分有一个解决方法:您可以编写一个在项目构建完成时触发的宏;如果项目的构建状态为“失败”,则宏可以发出取消构建命令。我经常在我使用的每台装有 Visual Studio 的计算机上安装这个 hack。但是,在家里我使用的是不支持宏的 Visual C# Express。

    有没有办法让 Visual Studio 2010(包括 Express 版本)在构建失败时停止构建?

    最佳答案

    尽管我喜欢 MSBuild,但在使用解决方案文件进行构建时,并没有内置的方法来执行此操作(正如您已经发现的那样)。启用 Resharper 的分析后,我发现这些天编译器错误对我来说非常罕见,因此我很少遇到大量错误消息的问题。

    在我以前的商店,有人经常打包构建,以便在 60 多个项目的解决方案中找到一个根项目,因此,许多人开始从命令行单独运行项目,类似于运行单独的 Make 文件。

    如果您真的想以不同于您提到的宏的方式处理此问题,您可以构建一个外部 msbuild 文件,该文件单独执行项目并检查运行之间的错误。您必须保持构建顺序正确,并且需要从命令行运行它和/或向“工具”菜单选项添加快捷方式。

    下面是一个例子:

     <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
    <MSBuild ContinueOnError="false" Projects="log4net\log4net.csproj" Targets="Build">
    <Output TaskParameter="TargetOutputs" ItemName="BuildOutput"/>
    </MSBuild>
    <MSBuild ContinueOnError="false" Projects="Project1\Project1.csproj" Targets="Build">
    <Output TaskParameter="TargetOutputs" ItemName="BuildOutput"/>
    </MSBuild>
    <MSBuild ContinueOnError="false" Projects="Project3\Project3.csproj" Targets="Build">
    <Output TaskParameter="TargetOutputs" ItemName="BuildOutput"/>
    </MSBuild>
    </Target>
    <!-- <OnError ExecuteTargets="ErrorTarget" /> //-->
    </Project>

    用您的项目替换项目,并且需要为 Clean 目标模仿该组。

    我希望有一个更好的解决方案,我不知道为什么 MSBuild 团队不会将此功能添加到产品中。就像你说的,Make在几十年前就想通了。 FWIW,我不知道这对于复杂的构建依赖项和构建并行性的效果如何。

    我的 MSBuild 问题集中在 ResolveAssemblyReferences 和 ResolveComReferences Tasks 周围,它们是大型解决方案中构建最慢的部分,具有大型/复杂的项目依赖关系树(大型项目至少是相对 30 个项目)。

    我希望这有帮助。

    关于visual-studio - 当某些内容无法编译时,使 Visual Studio (Express) 停止编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5155599/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com