2017-12-19 126 views
5

Trong giải pháp this Tôi có 2 ứng dụng: AppA, AppB chia sẻ thư viện lớp Shared. Tôi đã thử tự động hóa việc xây dựng/chạy này song song với cả hai tập lệnh PowerShellnode (tôi sẽ mở cho các giải pháp khác). Tôi đang sử dụng cả hai --no-dependencies--no-restore cờ, nhưng không liên tục tôi nhận được:xây dựng lõi dotnet song song hoặc đồng thời

'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 enter image description here

nút: dự án chạy build-script hoặc node ./build-script/app.js enter image description here

Tại sao tòa nhà dự án Shared ngay cả với cờ --no-dependencies? Làm thế nào để xây dựng song song hoặc đồng thời?

+0

Bạn gọi quy trình xây dựng như thế nào? Đăng mã của bạn. – TheIncorrigible1

+0

@ TheIncorrigible1 tất cả mã nằm trong repo –

+0

Không nhận thấy các liên kết, cảm ơn – TheIncorrigible1

Trả lời

3

Giải thích cho CS2012 lỗi: Quá trình này không thể truy cập các tập tin

tôi có thể tạo lại vấn đề của bạn và Process Monitor chỉ ra rằng cả hai quá trình mở shared.dll tại cùng một thời gian cho việc đọc sách. Điều này dẫn đến vấn đề bạn đã mô tả.

Mặc dù đọc cùng một tập tin từ các quá trình khác nhau có thể được thực hiện bằng cách sử dụng FileShare.Read như documentation chỉ ra (xem đoạn trích dưới đây), có vẻ như đây là KHÔNG thực hiện bằng cách csc.exe. Đây là một thiếu sót của csc.exe, có thể sẽ không bị thay đổi trong tương lai gần.

Cho phép mở tệp tiếp theo để đọc. Nếu cờ này không phải là được chỉ định, mọi yêu cầu mở tệp để đọc (theo quy trình này hoặc quy trình khác) sẽ không thành công cho đến khi tệp được đóng. Tuy nhiên, ngay cả nếu cờ này được chỉ định, các quyền bổ sung vẫn có thể là cần thiết để truy cập tệp.

Giải pháp

Thay vì sử dụng Start-Process để đạt được xây dựng song song, bạn có thể sử dụng msbuild, mà hỗ trợ này ra khỏi hộp.

Xây dựng song song được hỗ trợ bởi msbuild với thông số /maxcpucount -switch và BuildInParallel -task như được mô tả trong MS build documentation.

Parallel xây dựng được kích hoạt bằng cách sử dụng /maxcpucount -switch trên dòng lệnh:.

DotNet msbuild \ ParallelBuildAB.csproj/mục tiêu: xây dựng/khôi phục: false /maxcpucount: 2

Ngoài nó cũng cần thiết để sử dụng thông số BuildInParallel -task trong tệp dự án ParallelBuildAB.csproj.Xin lưu ý rằng AppA.csprojAppB.csproj được tham chiếu:

<?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> 
+0

Vì vậy, tôi phải thực hiện dự án mới 'ParallelBuildAB.csproj' để xây dựng 2 dự án song song? Cũng có thể chạy chúng từ cùng một lệnh? –

Các vấn đề liên quan