2012-03-30 5 views
11

.csproj를 위해 프로그래밍 방식으로 프로젝트를 작성해야합니다. Google 검색 중 MSBuild Engine에 대해 MS에서 제공하는 클래스와 API를 찾았습니다. 이 정보를 가지고 msbuild.exe를 실행 한 다음 출력을 읽는 프로세스를 만들었지 만 지금은 네임 스페이스 Microsoft.Build.Execution을 사용하여 프로젝트를 빌드하려고합니다.프로그래밍 방식으로 프로젝트 빌드하기

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 = ""; 
    } 
} 

결과이 잘 구축되어 있음을 보여 주지만, 내가 컴파일 방법을 보는 방법의 자세한 출력을 알아야 : 이것은 내 프로그램입니다. 누군가가 나에게 MSBuild에 관한 훌륭한 튜토리얼이나 책에 대한 링크를 줄 수 있다면 정말 도움이 될 것입니다.

답변

8

BuildParametersILogger 인터페이스를 구현하는 클래스의 인스턴스를 추가해야합니다. 제공된 로그 작성기 중 하나의 새 인스턴스를 Microsft.Build.Logging 네임 스페이스에 추가하거나 매우 작기 때문에 ILogger을 직접 구현할 수 있으며 Logger이라는 도우미 클래스가 있습니다.이 도우미 클래스는 쉽게 확장 할 수있는 Logger이라는 네임 스페이스에 있습니다.

+0

thankx은 ... 당신은 어디에 네임 스페이스의 동일한 세트에 대한 좋은 자습서를 찾을 수 내 알 수 있습니까? –

+0

@Parv - 문서 (내가 훌륭하다고 생각하는 것) 이외에,이 문서를 시험해 볼 수 있습니다. http://www.amazon.com/Inside-Microsoft%C2%AE-Build-Engine-Pro-Developer/dp/0735626286 –

+0

제가 알고있는 MSBuild 전용 책은 두 권뿐입니다. 둘 다 좋습니다 (개발자 리뷰) : (1) 위에서 언급 한 MSPress 책 -하지만 초판으로의 링크는 두 번째 책입니다. 4.0 버전 기능이 포함 된 버전. (2) MSBuild 팁 및 트릭 - 아마존에서 검색 - 이것은 매우 많은 고급 가이드입니다. MSDN 문서는 매우 제한되어 있습니다. –

13

감사 @ritchmelton

Logger helper

ILogger interface

Build loggers

. 나는 나 자신을 알아 냈지만. 다음은 내 코드입니다 : 나는 당신이 단지 정교한 매개 변수가없는 프로젝트 나 솔루션을 구축하려는 경우, 당신은 더 간단하게 할 수 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

내장 로거에 사용했다. 의사 코드 :

using namespace Microsoft.Build.Evaluation; 

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

그게 전부 야! BuildParameters 등은 상당히 고급 시나리오를위한 것입니다. Visual Studio 자체에서 사용합니다.

단 (msbuild를 DEV)

+2

굉장! 구문은 MSBuild 14에서 변경되었습니다. 새로운 프로젝트 ("project to"프로젝트 "). – Mrchief

관련 문제