【问题标题】:dotnet core build in parallel or simultaneouslydotnet core 并行或同时构建
【发布时间】:2018-06-02 08:55:34
【问题描述】:

this 解决方案中,我有 2 个应用程序:AppAAppB 共享类库 Shared。我已经尝试使用PowerShellnode 脚本并行自动构建/运行这些脚本(我愿意接受其他解决方案)。我同时使用--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'

PowerShell: ./build.ps1

节点: 运行项目build-scriptnode ./build-script/app.js

为什么Shared 项目即使带有--no-dependencies 标志也能构建?如何并行或同时构建?

【问题讨论】:

  • 如何调用构建过程?发布您的代码。
  • @TheIncorrigible1 所有代码都在仓库中
  • 没有注意到链接,谢谢
  • 我可以重现您的问题。但它很少发生。它工作了九九次,然后失败了。使用 Process Monitor v3.40 我观察了访问 shared.dll 的进程,我可以看到在构建期间 shared.dll 被两个构建进程读取。为了从中读取元信息,这是必要的。

标签: node.js powershell .net-core dotnet-cli


【解决方案1】:

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

我可以重现您的问题,Process Monitor 表示两个进程同时打开shared.dll 以供阅读。这导致了您描述的问题。

虽然可以通过使用FileShare.Read 来完成从不同进程中读取相同文件的操作,正如documentation 所指示的那样(参见下面的摘录),但似乎这不是csc.exe 完成的。这是csc.exe的一个缺点,近期可能不会改。

允许随后打开文件进行读取。如果没有这个标志 指定,任何打开文件进行读取的请求(通过此过程 或其他进程)将失败,直到文件关闭。然而,即使 如果指定了这个标志,额外的权限可能仍然是 需要访问该文件。

解决方案

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

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

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

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

另外还需要在项目文件ParallelBuildAB.csproj中使用BuildInParallel-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>

【讨论】:

  • 所以我必须创建新项目ParallelBuildAB.csproj 来并行构建两个项目?也可以从同一个命令运行它们吗?
猜你喜欢
  • 2023-02-18
  • 2017-08-21
  • 2017-03-28
  • 2020-12-23
  • 2018-06-16
  • 2016-08-21
  • 2019-01-07
  • 1970-01-01
  • 2017-08-13
相关资源
最近更新 更多