dotnet核心并行或同时构建

Wil*_*han 5 powershell node.js .net-core dotnet-cli

这个解决方案中,我有2个应用程序:AppA,AppB共享类库Shared.我已尝试与PowerShell节点脚本并行地自动构建/运行这些(我将对其他解决方案开放).我正在使用两者--no-dependencies--no-restore旗帜,但间歇地我得到:

'CSC : error CS2012: Cannot open \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' for writing -- \'The process cannot access the file \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' because it is being used by another process.\' [C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\Shared.csproj]\r\n'
Run Code Online (Sandbox Code Playgroud)

PowerShell:./ build.ps1 在此输入图像描述

node:运行项目build-scriptnode ./build-script/app.js 在此输入图像描述

为什么Shared项目建设即使有--no-dependencies旗帜?如何并行或同时构建?

Aed*_*seh 5

CS2012 错误解释:进程无法访问文件

我可以重现您的问题,进程监视器表明两个进程同时打开shared.dll以供阅读。这会导致您描述的问题。

虽然阅读来自不同进程的同一个文件可以通过使用来完成FileShare.Read文档显示(见下文节选),似乎这是不是所做csc.exe。这是 的一个缺点csc.exe,在不久的将来可能不会改变。

允许随后打开文件进行读取。如果未指定此标志,则任何打开文件进行读取的请求(由该进程或另一个进程)都将失败,直到文件关闭。但是,即使指定了此标志,可能仍需要其他权限才能访问该文件。

解决方案

Start-Process您可以使用 msbuild,而不是用于实现并行构建,它支持开箱即用。

msbuild 使用/maxcpucount-switch 和BuildInParallel-task 参数支持并行构建,如MS 构建文档中所述

通过/maxcpucount在命令行上使用-switch启用并行构建:

dotnet msbuild .\ParallelBuildAB.csproj /target:build /restore:false /maxcpucount:2

此外还需要BuildInParallel在项目文件ParallelBuildAB.csproj 中使用-task 参数。请注意,AppA.csprojAppB.csproj被引用:

<?xml version="1.0"?>
<Project name="system" default="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="build">
        <MSBuild BuildInParallel="true" Projects="./AppA/AppA.csproj;./AppB/AppB.csproj" Targets="Build"/>
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)