2011-07-27 8 views
6

Tôi đang cố gắng cải thiện thời gian xây dựng bằng CruiseControl.NET và MSBUILD, và một trong các công tắc dòng lệnh, maxcpucount có thể được sử dụng để cho phép xây dựng diễn ra song song. Giải pháp của chúng tôi có hơn 60 dự án nên mọi cải tiến sẽ hữu ích. Tuy nhiên, bất cứ khi nào tôi lên maxcpucount trên một, chúng ta có thường xuyên xây dựng thất bại do:MSBUILD không thành công với "Quá trình không thể truy cập tệp xxxxx vì nó đang được sử dụng bởi một tiến trình khác." khi maxcpucount lớn hơn 1

"Quá trình không thể truy cập các tập tin xxxx vì nó đang được sử dụng bởi quá trình khác MSBuild"

Dường như các luồng/quy trình xây dựng song song bổ sung đang khóa lẫn nhau.

Trả lời

2

Bạn đang xây dựng từ một tệp giải pháp? Nếu vậy, hãy đảm bảo rằng bạn đang sử dụng các tham chiếu trực tiếp từ dự án đến dự án và không sử dụng tính năng phụ thuộc vào dự án của Solution. Nếu bạn đang sử dụng một chút của cả hai, có thể có vấn đề. Xem this article.

Tốt hơn, nếu có thể, hãy bỏ qua tệp giải pháp và tạo tệp MSBuild của riêng bạn để thúc đẩy quá trình tạo.

+1

có, tôi đang tạo tệp giải pháp có tất cả các tham chiếu dự án. – JNappi

0

Lắp ráp của bạn có thể đang được sử dụng bởi một hội đồng khác đang được xây dựng. Hãy chắc chắn rằng mỗi hội đồng được xây dựng trước khi nó cần thiết bởi các hội đồng khác

3

Tôi nghĩ rằng tôi đã tìm thấy một giải pháp. Có vẻ như nếu tôi thêm nút chuyển/nodeReuse: false, tôi không nhận được khóa tệp. Có vẻ như chức năng nodeReuse đang giữ các quy trình msbuild xung quanh và những người đang treo trên để khóa tập tin cho các bản dựng tiếp theo.

http://msdn.microsoft.com/en-us/library/ms164311.aspx

+0

Điều này thực sự không hoạt động. Nó có vẻ tốt cho một vài xây dựng nhưng cuối cùng tôi đã kết thúc với xây dựng bị hỏng do dll đang bị khóa. – JNappi

+0

Bạn có chắc msbuild của nó đang khóa tập tin này không? Bạn có thể xác nhận qua Process Explorer hoặc tiện ích tương tự không? – Mrchief