我有一个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文件中,如果步骤失败,那么实际上会使构建失败吗?
答案 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)