首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行或同时构建dotnet核心

并行或同时构建dotnet核心
EN

Stack Overflow用户
提问于 2017-12-19 21:04:15
回答 1查看 7.1K关注 0票数 9

解决方案中,我有两个应用程序:AppA,共享类库SharedAppB。我尝试过与PowerShell节点脚本并行地自动构建/运行这些脚本(我愿意接受其他解决方案)。我同时使用--no-dependencies--no-restore标志,但间歇性地得到:

代码语言:javascript
复制
'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项目?如何并行或同时构建?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-29 08:48:26

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

我可以复制您的问题,过程监视器表示两个进程同时打开shared.dll进行阅读。这就引出了你所描述的问题。

虽然从不同进程读取相同的文件可以使用FileShare.Read来完成(参见下面的摘录),但这似乎是而不是csc.exe完成的。这是csc.exe的一个缺点,在不久的将来可能不会改变。

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

溶液

与使用Start-Process实现并行构建不同,您可以使用msbuild,它可以直接支持这一点。

msbuild支持并行构建,其中包含/maxcpucount、-switch和BuildInParallel-task参数,如M. build文档中所述。

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

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

此外,在项目文件BuildInParallel中使用-task参数也是必要的.请注意,引用了AppA.csprojAppB.csproj

代码语言:javascript
复制
<?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>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47895162

复制
相关文章

相似问题

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