2010-08-27 40 views
8

Với một giải pháp đó:Làm thế nào để xây dựng một dự án C# mà không kiểm tra phụ thuộc?

  • Dự án P1 có một tham chiếu đến P2
  • P2 có một tham chiếu đến P3
  • P3 có tham chiếu đến P4

Khi bạn gọi msbuild theo cách này:

msbuild.exe /v:m "c:\mysolution\p1\p1.csproj" 

msbuild kiểm tra tất cả các phụ thuộc dự án được xây dựng phụ thuộc nếu cần. Sản lượng điển hình là:

Microsoft (R) Build Engine Version 4.0.30319.1 
[Microsoft .NET Framework, Version 4.0.30319.1] 
Copyright (C) Microsoft Corporation 2007. All rights reserved. 

    P4 -> c:\mysolution\P4\bin\Debug\P4.dll 
    p3 -> c:\mysolution\p3\bin\Debug\p3.dll 
    p2 -> c:\mysolution\p2\bin\Debug\p2.dll 
    p1 -> c:\mysolution\p1\bin\Debug\p1.dll 

Trong trường hợp của tôi, tôi biết các phụ thuộc tồn tại và được rồi.

Có cách nào để chỉ xây dựng dự án p1.csproj mà không xác minh sự phụ thuộc không? Các giải pháp có thể được với msbuild hoặc với cái gì khác.

+0

Tôi tự hỏi .... tôi có thể gọi trình biên dịch C# thay vì msbuild và chuyển tất cả các tham số không? Có khó để tìm ra các thông số để vượt qua ngay cả đối với một dự án lớn có nhiều tham chiếu và phụ thuộc không? – Sylvain

+0

Câu hỏi có liên quan: http://stackoverflow.com/questions/819031/how-to-decrease-msbuild-times – wmeyer

+0

Cảm ơn. Chúng tôi đã sử dụng nhiều bộ xử lý được xây dựng với msbuild (/ m tùy chọn) và đối với chúng tôi, nó tạo ra sự khác biệt rất lớn: gần với 2X nhanh hơn. – Sylvain

Trả lời

4

bạn có thể vượt qua /p:BuildProjectReferences=false để MSBuild, mà sẽ bỏ qua refence xây dựng dự án .. nhưng điều này có một giới hạn, nếu cấu hình giải pháp của bạn và tham chiếu cấu hình của dự án là không phù hợp, msbuild sẽ thất bại trong việc giải quyết mục tiêu tham chiếu dự án tệp đầu ra ...

đây là một miễn phí vs gói mở rộng, bạn có thể tải về và thử http://visualstudiogallery.msdn.microsoft.com/98de4058-8dc7-435b-9e01-c0f71dace808

vs gói: Utility Build Sharp

Tôi là tác giả của phần mở rộng này, tôi có yêu cầu tương tự trong công việc hiện tại , hãy tận hưởng công cụ này ...

về cơ bản, tiện ích này có thể tạo bản sao bóng của tệp dự án xây dựng, thay đổi tất cả tham chiếu dự án thành tham chiếu tệp dll và khởi chạy msbuild với tệp dự án bóng.

2

Mục tiêu là gì (tại sao bạn quan tâm)?

Bạn có thể sử dụng tham chiếu lắp ráp thay vì tham chiếu dự án (nhưng hãy xem xét gỡ rối các khác biệt của đường dẫn phát hành v).

+0

Tôi quan tâm vì trong một giải pháp với 100 dự án, bước này mất rất nhiều thời gian; Thời gian gấp 10 lần so với việc biên soạn dự án mà tôi quan tâm. Thay đổi cấu trúc của giải pháp hoặc sử dụng tham chiếu assembly không phải là lựa chọn tốt cho tôi. – Sylvain

+0

Đó không phải là những gì tôi thấy ở đây trên máy của tôi. Nếu một msbuild chạy trên dự án của tôi, nó mất khoảng 30 giây để tìm ra rằng không có gì để làm. Nếu tôi làm điều đó một lần nữa ngay lập tức, phải mất thêm 30 giây nữa. Đó là quá trình kiểm tra các phụ thuộc cần có thời gian. Đó là lý do tại sao tôi muốn bỏ qua phần đó. – Sylvain

+1

Tôi ngạc nhiên về sự hoàn hảo là điều xấu. Bạn có thể muốn bật chẩn đoán MSBuild để tìm ra những gì mất quá nhiều thời gian. Kiểm tra cập nhật phải nhanh chóng, đặc biệt nếu mọi thứ thực sự được cập nhật. Công cụ \ Tùy chọn \ Dự án & Giải pháp \ Build & Run thay đổi độ dài đầu ra của MSBuild thành 'chẩn đoán', thực hiện hành động 30 giây và xem cửa sổ đầu ra trong khi (và sau đó quét) để tìm hoạt động 'chậm'. – Brian

1

Có lẽ bạn có thể sử dụng Trình quản lý cấu hình trong Visual Studio và bỏ chọn tất cả các dự án mà bạn muốn xây dựng.

+0

Tôi cần một giải pháp hoạt động mà không thay đổi giải pháp hoặc các projets. Tôi cần điều này để làm việc từ dòng lệnh. – Sylvain

+0

@Sly: Thêm cấu hình riêng vào giải pháp của bạn. Bạn có thể chọn cấu hình để xây dựng từ dòng lệnh. Điều này tương tự như các mục tiêu trong cổ điển * làm *. Ví dụ. có một cấu hình * Release All *, * Debug All *, * Release Subbranch *, * Debug Subbranch *, ... –

0

Kiểm tra thực hành tốt nhất của Microsoft cho các giải pháp và các dự án kết cấu:

Microsoft Patterns & Practices: Structuring Solutions and Projects

gì bạn đang có là một là một giải pháp đơn . Đây là trường hợp lý tưởng nên được sử dụng bất cứ khi nào có thể. Tuy nhiên, một giải pháp duy nhất có thể trở thành không thực tế đối với các giải pháp rất lớn như của bạn.

Bạn có thể muốn xem xét phân vùng giải pháp, tức là sử dụng các giải pháp riêng biệt cho các phân đoạn của cây phụ thuộc. Hoặc thậm chí bạn có thể cân nhắc sử dụng một giải pháp đa chức năng. Hãy xem bài viết được liên kết để xem về hậu quả và hạn chế của sự thay đổi đó. Có thể sử dụng phần cứng nhanh hơn có thể là tùy chọn thích hợp hơn.

+0

Như tôi đã viết trong nhận xét của tôi về grefly, tôi cần một giải pháp hoạt động mà không thay đổi giải pháp hoặc các projets. – Sylvain

+0

Nhân tiện, chúng tôi từng có nhiều giải pháp (trong nhiều năm) nhưng khi bạn làm điều đó, bạn phải nói tốt với tất cả các công cụ tái cấu trúc và "tìm tài liệu tham khảo" và "đi đến định nghĩa" và đó là thời gian xây dựng lâu nhất . – Sylvain

+0

@Sly: 1.) Một giải pháp phân vùng hoạt động mà không sửa đổi các giải pháp và dự án hiện có, nó chỉ thêm các giải pháp cho các nhánh con của cây phân vùng. 2.) Xin lỗi, nhưng bạn không thể có cả hai. Để tái cấu trúc và * tìm các tham chiếu * để làm việc tất cả mã nguồn phải được tải, tức là bạn phải sử dụng các tham chiếu dự án. Đây là một trong những lý do để sử dụng một giải pháp duy nhất bất cứ khi nào có thể (Lý do chính là để phụ thuộc của bạn luôn được cập nhật và trong phiên bản dòng điện và sẵn sàng gỡ lỗi). –

0

Bạn nên kiểm tra sản phẩm có tên OpenMake. Kỹ sư xây dựng chì của tôi nói với tôi rằng họ đã làm rất nhiều với kiểm tra sự phụ thuộc và xây dựng song song.

OpenMake

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