2012-05-06 21 views
5

Làm cách nào để truy cập ngữ cảnh Dự án hiện tại trong một Tác vụ tùy chỉnh trong MSBuild? Lúc đầu nó xuất hiện như thể tham chiếu GlobalProjectCollection trên ProjectCollection sẽ cho phép truy cập, nhưng điều này dường như trống, ít nhất là khi chạy MSBuild từ dòng lệnh.Làm cách nào để truy cập ngữ cảnh Dự án hiện tại trong Công việc tùy chỉnh?

Tôi hiện có thể nhận được dụ dự án mới dựa tắt của hồ sơ dự án hiện theo cách sau đây:

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

nhưng nó chỉ có vẻ như rất nhiều rắc rối. Làm thế nào tôi có thể truy cập vào dự án mà từ đó nhiệm vụ của tôi được gọi ra?

Trả lời

5

Bạn không thể. MSBuild được thiết kế đặc biệt để các tác vụ riêng lẻ chỉ có quyền truy cập vào các tham số mà bạn đã chuyển cho nhiệm vụ một cách rõ ràng và không có gì khác. Điều đó làm cho các tệp MSBuild dễ đọc hơn, bây giờ bạn biết rằng mỗi tác vụ chỉ bị ảnh hưởng bởi những gì bạn đã biết khi bạn gọi nhiệm vụ này.

Mã bạn có không tạo bản sao của dự án, nó đang tạo một phiên bản mới, vì vậy bạn không nên mong đợi các thuộc tính giống nhau. Ví dụ một thể hiện của dự án đang thực thi (từ nơi mà nhiệm vụ của bạn được gọi) có thể có các thuộc tính được ghi đè từ dòng lệnh hoặc thay đổi theo cách dự án của bạn được xây dựng, trong khi dự án mới được tạo của bạn sẽ có giá trị mặc định của thuộc tính sau lần đầu tiên MSBuild engine truyền qua tập tin.

+1

Bạn đúng. Ngay cả nhiệm vụ có các tham chiếu từ dự án vùng chứa của nó được truyền vào nó, thay vì tham chiếu một số đối tượng cha từ bên trong. Vì đây là những gì tôi hiện đang cố gắng tham khảo, tôi sẽ tìm cách lấy được các tham chiếu theo cách tương tự với nhiệm vụ cốt lõi này. – bojolais

+0

Điều gì về tài sản toàn cầu? Những người có thể được truy cập trong một nhiệm vụ? – Irek

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