msbuild.exe vẫn mở, khóa tệp


97

Tôi sử dụng TeamCity lần lượt gọi msbuild (.NET 4). Tôi có một vấn đề kỳ lạ là sau khi xây dựng hoàn tất (và dường như không quan trọng nếu đó là xây dựng thành công hay không), msbuild.exe vẫn mở và khóa một trong các tệp, có nghĩa là mỗi khi TeamCity cố gắng để xóa thư mục công việc của nó, nó không thành công và không thể tiếp tục.

Điều này xảy ra hầu như mọi lúc.

Tôi thực sự bị mất trong vấn đề này, vì vậy tôi sẽ cố gắng cung cấp càng nhiều chi tiết càng tốt.

  • Máy chủ là Intel Core i7, ram 2 GB, chạy Windows Server 2008 64-bit SP2 chuẩn.
  • Trong TeamCity, trình chạy msbuild được định cấu hình với /mtham số dòng lệnh (có nghĩa là sử dụng nhiều lõi)
  • Tệp được đề cập LUÔN LUÔN là cùng một DLL bên ngoài được tham chiếu trong một trong các dự án .NET, trong đường dẫn External Tools\Telerik\Telerik.Reporting.Dll. (Có một số tệp .DLL khác được bao gồm trong External Toolsdir trong một cấu trúc đường dẫn tương tự không bao giờ gây ra sự cố này). Hiện tại, điều này là với phiên bản thử nghiệm của báo cáo Telerik, trong trường hợp có bất kỳ sự khác biệt nào.
  • Khi sự cố xảy ra, luôn có một số msbuild.exe *32quy trình được liệt kê trong Trình quản lý tác vụ: Tôi tin rằng có 7. Sử dụng Process Explorer, tất cả chúng trông giống như các quy trình cấp cao nhất (không có cha mẹ). Tất cả chúng đều đang sử dụng ram từ 20-50MB và CPU 0,0%.
  • Nếu tôi đợi 1-3 phút, các quy trình msbuild.exe sẽ tự thoát ra và sau đó TeamCity có thể cập nhật thư mục công việc đúng cách.
  • Nếu tôi chấm dứt quy trình msbuild theo cách thủ công, bản cập nhật của TeamCity sẽ hoạt động lại ngay lập tức.
  • Dịch vụ lập chỉ mục bị tắt trong Windows (mặc dù hai điểm trước đó xác nhận khá nhiều đó là msbuild.exe gây ra sự cố).
  • Không có thuộc tính đặc biệt nào trên Telerik.reporting.dll. Thuộc tính SVN duy nhất làsvn:mime-type = application/octet-stream

Có ai chạy qua điều này trước đây?

Câu trả lời:


122

Sử dụng msbuildvới /nr:false.

Tóm lại: MSBuild cố gắng làm nhiều thứ để nhanh chóng, đặc biệt là với các bản dựng song song. Nó sẽ sinh ra rất nhiều "nút" - các quy trình msbuild.exe riêng lẻ có thể biên dịch các dự án và vì các quy trình mất một chút thời gian để quay lên, sau khi xây dựng xong, các quy trình này sẽ treo lơ lửng (theo mặc định, trong 15 phút, tôi nghĩ ), để nếu bạn sớm xây dựng lại, các nút này có thể được "tái sử dụng" và tiết kiệm chi phí thiết lập quy trình. Nhưng bạn có thể vô hiệu hóa hành vi đó bằng cách tắt nodeReuse với tùy chọn dòng lệnh nói trên.

Xem thêm:


2
Có ý nghĩa: nó dường như không xảy ra nếu tôi loại bỏ / m. Bây giờ tôi đang thử với /m /nr:false, tôi sẽ chạy một vài bản dựng và xem nó diễn ra như thế nào. Cảm ơn
gregmac

26
Làm cách nào để bạn có được Visual Studio để xây dựng dự án với tùy chọn msbuild đó?
Cameron Taggart

1
Tôi vẫn muốn biết, nhưng tôi đã thực sự gặp phải lỗi Visual Studio 11 Beta cho các dự án C ++ / CLI. Là gây ra các triệu chứng tương tự: connect.microsoft.com/VisualStudio/feedback/details/728912/…
Cameron Taggart

3
Tối ưu hóa sớm thực sự là gốc rễ của mọi điều xấu xa. Bạn thật tệ, Microsoft.
johnwbyrd

1
@CameronTaggart Bạn có thể thêm các tùy chọn dòng lệnh msbuild với một tệp đặc biệt được lưu trữ trong thư mục dự án / giải pháp của bạn. Xem docs.microsoft.com/en-us/visualstudio/msbuild/…
needfulthing

43

Để tắt sử dụng lại nút trong Visual Studio, bạn phải sử dụng một biến môi trường:

MSBUILDDISABLENODEREUSE=1

Tôi đã sử dụng điều này một cách hiệu quả, tuy nhiên có một công cụ khác đang bị lỗi khi biên dịch C ++ với VS11 Beta, đó là mt.exe, có biến nào khác để sử dụng cho điều đó không?
Eugenio Miró

Nó không thể được đặt bằng cách sử dụng một hộp thoại ở đâu đó trong VS?
dom_beau

1
@dan Chân thành cảm ơn bạn đã tìm thấy cái này và tôi đang cầu nguyện có một biến môi trường để tắt Microsoft.VisualStudio.Web.Host.exe.
jerhewet

Điều này cũng hoạt động khi chạy một bản dựng từ dòng lệnh, ví dụ: tập lệnh hàng loạt, máy chủ bản dựng, v.v.
Dave E
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.