2010-02-19 37 views
10

Chúng tôi đang sử dụng .NET 3.5 với VS2008. Tôi có một giải pháp với ~ 20 dự án trong đó, và con số đó sẽ tăng theo thời gian khi ứng dụng phát triển và thêm các mô-đun mới. Hôm nay tôi cần thiết để thiết lập một tài sản trên mọi dự án. Tôi đã phải chỉnh sửa từng tập tin csproj thêm như sau:MSBuild - Đặt thuộc tính cho giải pháp

<Target Name="BeforeBuild"> 
    <CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' " 
        Value="$(SolutionDir)Tools\MSBuild"> 
     <Output TaskParameter="Value" PropertyName="AlToolPath" /> 
    </CreateProperty> 
    </Target> 

này là cho phép các dự án để tìm ra mối liên kết lắp ráp (AL.exe) được lưu trữ trong kho lưu trữ nguồn của tôi để xây dựng là máy bất khả tri (có thể kiểm tra và xây dựng trên bất kỳ máy nào có .NET mà không phải cài đặt SDK). Giải pháp được xây dựng trên dòng lệnh bằng cách sử dụng MSBuild bởi các nhà phát triển, cài đặt các tệp batch, CCNet, v.v.

Dù sao, tôi đã tìm cách tốt hơn để thực hiện điều này. Tôi biết rằng có thể thiết lập giá trị thuộc tính trong dòng lệnh MSBuild, nhưng điều đó không mở rộng tốt cho tôi vì tất cả các dòng lệnh hiện tại và tương lai sẽ phải bao gồm nó. Tôi cũng nghĩ về việc gọi một mục tiêu trước trong dự án được xây dựng đầu tiên để sử dụng một nhiệm vụ tùy chỉnh để đặt biến môi trường và sau khi nhắm mục tiêu trong dự án cuối cùng để loại bỏ nó, nhưng điều đó dường như nặng hơn và dễ vỡ hơn là chỉ chỉnh sửa tất cả các tệp dự án riêng lẻ .

Hãy cho tôi biết nếu bạn đã làm điều gì đó như thế này hoặc biết cách thiết lập thuộc tính một lần cho mỗi giải pháp có thể được sử dụng bởi nhiều dự án (bao gồm .NET 4/VS2010 mà tôi không có kinh nghiệm). Hãy nhớ rằng chúng tôi đang sử dụng MSBuild để xây dựng tệp sln, chứ không phải các dự án riêng lẻ.

Trả lời

14

Bạn có thể chỉ định thuộc tính này và tất cả các thuộc tính phổ biến khác, trong một tệp và tải tệp bằng cách đưa vào tệp dự án của bạn một tuyên bố Import. Đây là những gì chúng tôi làm trong môi trường xây dựng của chúng tôi, có khoảng 220 dự án được xây dựng và nhiều tệp dự án được chia sẻ (ví dụ: "chi nhánh"). Nó hoạt động tốt.

+2

Tôi thích giải pháp này, nhưng nó vẫn có nghĩa là các tệp dự án cần được chỉnh sửa ít nhất một lần. – Mafuba

+1

@Mafuba Tôi đã tự động hóa việc này bằng NuGet. –

+0

fyi sử dụng VS 2017 nếu tệp đạo cụ được chia sẻ được gọi là 'Directory.Build.props', nó sẽ tự động được nhập vào tất cả các dự án trong hệ thống phân cấp thư mục. –

1

Vì tệp giải pháp không phải là tệp MSBuild nên bạn sẽ không thể thực hiện các thao tác đó. Bạn chỉ có sự lựa chọn là đối phó với nó hoặc sử dụng một tập tin msbuild chính thay cho việc xây dựng tệp giải pháp. Một tùy chọn có thể là tạo một cấu hình đặc biệt được sử dụng bởi quá trình xây dựng của bạn. Và đối với các tệp giải pháp, bạn có thể chỉ định cấu hình được sử dụng.

7

Tôi đã triển khai giải pháp được đề xuất bởi @ fatcat111 một số lần ngay bây giờ. Lần này tôi đã tự động hóa quy trình này bằng cách sử dụng NuGet - Common.Props. Gói sẽ thêm một tệp đạo cụ chung ở cấp độ giải pháp và bằng cách cài đặt gói trong nhiều dự án của cùng một giải pháp, các thuộc tính có thể được chia sẻ.

Mã này nằm trên GitHub.

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