2012-03-30 68 views
11

tôi cần phải xây dựng một dự án lập trình cho một csproj tôi đang tạo ra khi đang bay. Trong khi tìm kiếm trên Google, tôi đã tìm thấy các lớp và API do MS cung cấp cho MSBuild Engine. Với thông tin đó, tôi tạo ra một quá trình mà thực hiện msbuild.exe và sau đó đọc kết quả, nhưng bây giờ tôi muốn sử dụng namespace Microsoft.Build.Execution để xây dựng dự án. Đây là chương trình của tôi:xây dựng một dự án

public class Compiler 
{ 
    private static string locationOfMSBuilldEXE = ""; 
    public static void Build(string msbuildFileName) 
    { 
     BuildManager manager = BuildManager.DefaultBuildManager; 

     ProjectInstance projectInstance = new ProjectInstance(msbuildFileName); 
     var result = manager.Build(new BuildParameters() 
       { 
        DetailedSummary = true 
       }, 
       new BuildRequestData(projectInstance, new string[] { "Build" })); 
     var buildResult = result.ResultsByTarget["Build"]; 
     var buildResultItems = buildResult.Items; 

     string s = ""; 
    } 
} 

Kết quả cho thấy rằng điều này đang xây dựng tốt, nhưng tôi cần phải biết sản lượng chi tiết từ biên dịch và làm thế nào để xem nó. Nó sẽ thực sự hữu ích nếu ai đó có thể cho tôi liên kết đến một hướng dẫn hay một cuốn sách về MSBuild.

Trả lời

8

Bạn cần thêm phiên bản của lớp thực hiện giao diện ILogger vào số BuildParameters của mình. Bạn có thể thêm một trường hợp mới của một trong những người khai thác gỗ được cung cấp trong không gian tên Microsft.Build.Logging, hoặc bạn có thể thực hiện ILogger mình vì nó là rất nhỏ và có một lớp helper trong không gian tên Microsoft.Build.Utilities gọi Logger đó là dễ dàng để mở rộng.

Build loggers

ILogger interface

Logger helper

+0

thankx .. bạn cũng có thể cho biết nơi để tìm hướng dẫn tốt cho cùng một tập hợp các không gian tên không? –

+0

@Parv - Khác với các tài liệu (mà tôi nghĩ là xuất sắc), bạn có thể thử cái này http://www.amazon.com/Inside-Microsoft%C2%AE-Build-Engine-Pro-Developer/dp/0735626286 –

+0

chỉ có hai cuốn sách dành cho MSBuild mà tôi biết, và cả hai đều tốt (và xem xét bởi các nhà phát triển): (1) cuốn sách MSPress nêu trên - nhưng liên kết là ấn bản đầu tiên, có được thứ hai ấn bản, bao gồm 4,0 tính năng; (2) Mẹo và thủ thuật MSBuild - tìm kiếm trên Amazon - đây là một hướng dẫn nâng cao. Các tài liệu MSDN là khá hạn chế, tôi sợ. –

13

Cảm ơn @ritchmelton. Mặc dù tôi đã tự tìm ra. Đây là mã của tôi: Tôi đã sử dụng một trong logger xây dựng ConsoleLogger

public class Compiler 
    { 
     private static string locationOfMSBuilldEXE = ""; 
     public static void Build(string msbuildFileName) 
     { 
      ConsoleLogger logger = new ConsoleLogger(LoggerVerbosity.Normal); 
      BuildManager manager = BuildManager.DefaultBuildManager; 

      ProjectInstance projectInstance = new ProjectInstance(msbuildFileName); 
      var result = manager.Build(
       new BuildParameters() 
       { 
        DetailedSummary = true, 
        Loggers = new List<ILogger>(){logger} 
       }, 
       new BuildRequestData(projectInstance, new string[] { "Build" })); 
      var buildResult = result.ResultsByTarget["Build"]; 
      var buildResultItems = buildResult.Items; 

      string s = ""; 
     } 
    } 
8

Nếu bạn chỉ muốn xây dựng một dự án hoặc giải pháp, không có tham số phức tạp, bạn có thể làm điều đó đơn giản hơn. Mã Pseudocode:

using namespace Microsoft.Build.Evaluation; 

var p = Project.Load("path to project"); 
p.SetGlobalProperty("Configuration", "Release"); 
p.Build(...); 

Vậy đó! BuildParameters và vv là cho các kịch bản khá tiên tiến. Visual Studio tự sử dụng chúng.

Dan (msbuild dev)

+2

Awesome! Xin lưu ý rằng cú pháp đã thay đổi trong MSBuild 14. Dự án mới của nó ("đường dẫn đến dự án") '. – Mrchief

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