首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Msbuild忽略连续性错误?

Msbuild忽略连续性错误?
EN

Stack Overflow用户
提问于 2014-02-12 11:18:10
回答 2查看 2.7K关注 0票数 1

我试图两次为几个项目调用MSbuild。第一次没有任何干净,但如果失败,我将调用一个干净,然后是一个新的构建。(理由是,我希望我的构建是快速的,但如果不能恢复干净,恢复nuget包构建等等)。这是可行的,但是如果第一次调用失败,构建仍然会失败(它已经设置为true,所以我不希望它失败.)。以下是构建文件的相关部分:

代码语言:javascript
复制
     <ItemGroup>
        <ProjectsToPublish Include="X.sln" />

      </ItemGroup>

      <Target Name="RestoreAllPackages">
        <Message Text="@(ProjectsToPublish)" />
        <Exec Command='"$(MSBuildProjectDirectory)\.nuget\nuget.exe" restore "$(MSBuildProjectDirectory)\%(ProjectsToPublish.Identity)"'
             />
      </Target>

      <Target Name="Build" >

        <MSBuild Projects="@(ProjectsToPublish)" Properties="SkipRestore=True;RunCodeAnalysis=False;Retries=10;RetryDelayMilliseconds=50" 
                 BuildInParallel="true" ContinueOnError="WarnAndContinue"  />

        <!-- MSBuildLastTaskResult outcome of previous task-->
        <PropertyGroup>
          <FastBuildFailed>false</FastBuildFailed>
          <FastBuildFailed Condition="'$(MSBuildLastTaskResult)' == 'false'" >true</FastBuildFailed>
        </PropertyGroup>

        <Message Importance="high" Text="Initial build failed? $(FastBuildFailed)"  />

        <Message Importance="high" Text="Initial build failed will retry"  Condition="'$(FastBuildFailed)'"  />

        <CallTarget Targets="FullBuild" Condition="'$(FastBuildFailed)'" />


      </Target>


      <Target Name="FullBuild" DependsOnTargets="RestoreAllPackages">

        <!--Fake property below to reexecute build exact same properties prevents the build lform re-->
        <MSBuild Projects="@(ProjectsToPublish)" Properties="SkipRestore=True;RunCodeAnalysis=False;FakeProperty=one" BuildInParallel="true"   />

      </Target>


      <Target Name="RestoreAllPackages">
        <Message Text="@(ProjectsToPublish)" />
        <Exec Command='"$(MSBuildProjectDirectory)\.nuget\nuget.exe" restore "$(MSBuildProjectDirectory)\%(ProjectsToPublish.Identity)"'
             />
      </Target>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-18 09:44:23

对于任何有这种奇怪错误的人来说。当构建在TFS构建服务器内部运行时,构建服务器解析日志输出,即使使用ContinueOnError设置也会失败。我的解决办法是<Exec Command="$(MSBuildBinPath)\msbuild.exe @(ProjectsToPublish) /noconlog " ContinueOnError="true" />,基本上是使用Exec生成一个新的MSBuild,并确保它没有使用/noconlog输出任何内容。

票数 1
EN

Stack Overflow用户

发布于 2015-11-18 16:50:49

与使用<OnError...不同,您可以为ContinueOnError分配值'WarnAndContinue',然后使用一个条件检查$(MSBuildLastTaskResult)属性。

一般例子:

代码语言:javascript
复制
<Error ContinueOnError="WarnAndContinue" />
<Message Importance="High" Text ="$(MSBuildLastTaskResult)" />
<!-- (Returns false) -->

(我相信"WarnAndContinue"$(MSBuildLastTaskResult)都是在MSBuild 4.0中引入的;它们应该可以在您的TFS 2012构建服务器上使用。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21726462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档