如何使project.json脚本的构建失败

时间:2016-12-21 14:41:13

标签: npm asp.net-core webpack .net-core project.json

我有一个ASP.NET Core webapp,它使用webpack构建前端代码。通过npm调用Webpack,然后通过我的project.json中的scripts部分调用它:

{
  ...
  "scripts": {
    "postcompile": "npm run build"
  }
}

" npm run build"如果构建失败,call会将进程退出代码设置为1。然而,运行" dotnet build"无论是从命令行还是从Visual Studio都没有失败 - 它会打印npm错误,但它不会使构建失败。

如何配置其他构建步骤,例如调用" npm run build"在我的project.json文件中,如果步骤失败,那么实际上会使构建失败吗?

2 个答案:

答案 0 :(得分:0)

我的构建服务器上的CI构建存在完全相同的问题。构建期间出现错误,但CI构建没有失败。我无法使用project.json中的脚本找到问题的解决方案(dotnet.exe只是忽略了脚本的退出代码),但找到了在.xproj文件中解决它的方法。

ASP.NET Core项目目前包含2个项目文件:project.json和.xproj每个项目。两者都能够运行某种用户定义的脚本。所以我将我的脚本合并到.xproj文件中并从project.json中删除它们。主要问题是在编译.NET代码之前找到一种调用它们的工作方式。所以这是我的.xproj文件。注意目标BuildManagementConsole。

主要问题是我无法使用'dotnet build'构建项目我必须使用'msbuild .xproj'命令行。在我看来,这个解决方案比将脚本合并到project.json更好,因为Microsoft将在下一版本的ASP.NET Core中删除它。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>d5feb23f-aaaa-4852-89c2-e1eef6ab52a8</ProjectGuid>
    <RootNamespace>ManagementConsole</RootNamespace>
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj\</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
  <ItemGroup>
    <DnxInvisibleContent Include=".bootstraprc" />
    <DnxInvisibleContent Include=".npmrc" />
    <DnxInvisibleContent Include="npm-debug.log" />
  </ItemGroup>
  <ItemGroup>
    <DnxInvisibleFolder Include=".nuget\" />
  </ItemGroup>
  <Target Name="BuildManagementConsole" BeforeTargets="Build">
    <Exec Command="dotnet restore" />
    <Exec Command="npm cache clean --force" />
    <Exec Command="npm install" />
    <Exec Command="npm run build:$(Configuration)" />
  </Target>
  <Import Project="$(VSToolsPath)\DotNet.Web\Microsoft.DotNet.Web.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

答案 1 :(得分:-1)

如果错误来自webpack build

,请确保在webpack配置中将bail属性设置为true

来自docs

  

保释
将第一个错误报告为硬错误,而不是容忍它。