2010-03-16 24 views
7

Tôi cần một tập hợp các tác vụ cần được thực thi chính xác một lần cho toàn bộ giải pháp. Thao tác này sẽ chạy các tác vụ sẽ sửa đổi từng dự án để chạy một tập hợp các tác vụ riêng biệt cho từng dự án. Chúng tôi đã làm điều này trước đó bằng cách sử dụng một dự án riêng biệt cho giải pháp có nhiệm vụ cấp độ giải pháp, nhưng chúng tôi muốn di chuyển ra khỏi đó. Có ai làm điều này hay không ai có bất cứ đề nghị về cách thực hiện điều này?Thực hiện mục tiêu chạy một lần ở cấp độ Giải pháp trong MSBuild

Trả lời

6

Vì tệp giải pháp không có định dạng MSBuild, chúng không dễ dàng mở rộng hoặc tùy chỉnh. Nếu bạn muốn kiểm soát nhiều hơn quá trình xây dựng, bạn sẽ phải tạo một tập tin msbuild "driver" sẽ thay thế tệp giải pháp của bạn. Bên trong tập tin trình điều khiển này bạn sẽ xây dựng tất cả các dự án mà bạn cần và thực hiện một số nhiệm vụ bổ sung. Bạn sẽ làm điều này bằng cách sử dụng MSBuild task. Đây là một ví dụ cho thấy cách xây dựng hơn 1 dự án.

<Project ...> 
    <ItemGroup> 
     <Projects Include="proj01.csproj"/> 
     <Projects Include="proj02.csproj"/> 
     <Projects Include="proj03.csproj"/> 
    </ItemGroup> 

    <Target Name="BuildAll"> 
     <MSBuild Projects="@(Projects)" BuildInParallel="true" /> 
    </Target> 

</Project> 

Vì vậy, trong trường hợp bạn chỉ thực hiện các tác vụ trước khi bạn tạo dự án. Cũng lưu ý rằng tôi đã chỉ định giá trị true cho BuildInParallel cho biết MSBuild có thể thử và xây dựng nhiều hơn một dự án cùng một lúc.

+0

Đây là một ý tưởng thú vị. Tôi tin rằng điều này cũng sẽ làm việc nếu tôi muốn thực hiện một số nhiệm vụ bổ sung trước khi xây dựng các dự án? (Và những nhiệm vụ bổ sung đó sẽ tự sửa đổi các dự án.) – Chandam

+0

Tạo các tệp xây dựng này là một kịch bản rất phổ biến. Rất nhiều người thích viết các loại tệp xây dựng này thay vì sử dụng giải pháp xây dựng sản xuất. Trong trường hợp của tôi, tôi chỉ sử dụng các tệp giải pháp cho Visual Studio, không bao giờ thực sự được xây dựng. –

+0

Nói trong cách tiếp cận này nói rằng nếu dự án của tôi 1 phụ thuộc vào dự án 2 sau đó sẽ không msbuild xây dựng dự án của tôi 2 hai lần do đó trì hoãn quá trình xây dựng? – Nikhil

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