2014-03-06 1 views
4

내가하는 TFS 서버에서 해결책을 얻기를 구축하고 IIS에 게시 콘솔 응용 프로그램을 쓰고 있어요에서 비주얼 스튜디오 솔루션을 구축,하지만 난 건물에 붙어있어이 코드 발견 , 매력...</p> <p>을 코드

public static void BuildProject() 
{ 
    string solutionPath = Path.Combine(@"C:\MySolution\Common\Common.csproj"); 

    List<ILogger> loggers = new List<ILogger>(); 
    loggers.Add(new ConsoleLogger()); 
    var projectCollection = new ProjectCollection(); 
    projectCollection.RegisterLoggers(loggers); 
    var project = projectCollection.LoadProject(solutionPath); 
    try 
    { 
     project.Build(); 
    } 
    finally 
    { 
     projectCollection.UnregisterAllLoggers(); 
    } 
} 

처럼 작동하지만 내 솔루션은 꽤 크다 여러 서로 의존 프로젝트가 올바른 순서로 얻는 방법을

(예 : 프로젝트 A B 프로젝트에 대한 참조가)를 포함하는 각 프로젝트를 구축 하시겠습니까? .sln 파일에서 전체 솔루션을 빌드하는 방법은 무엇입니까?

+0

가 같은 sollution 모든 경우에, 당신은 왜 프로젝트 참조를 추가하기보다는 서로의 DLL에 링크 것인가? – Kippie

+0

나는 그것들이 서로간에 링크되어 있다는 것을 의미하므로 전에 다른 빌드없이 프로젝트를 빌드 할 수 없다. – Doc

+0

[MSBuild] (http : // msdn)를 호출하는 대신이 buildrunner를 코딩해야하는 특별한 이유가 있는가? Microsoft.com/ko-kr/library/0k6kkbsd.aspx)를 사용하여 솔루션을 구축하십시오. TFS PowerShell Cmdlet과 함께 필요한 모든 기능을 사용할 수 있습니다. – Filburt

답변

7

을 솔루션을로드하고 컴파일하려면 다음 코드를 사용해보십시오 :

string projectFilePath = Path.Combine(@"c:\solutions\App\app.sln"); 

ProjectCollection pc = new ProjectCollection(); 

// THERE ARE A LOT OF PROPERTIES HERE, THESE MAP TO THE MSBUILD CLI PROPERTIES 
Dictionary<string, string> globalProperty = new Dictionary<string, string>(); 
globalProperty.Add("OutputPath", @"c:\temp"); 

BuildParameters bp = new BuildParameters(pc); 
BuildRequestData buildRequest = new BuildRequestData(projectFilePath, globalProperty, "4.0", new string[] { "Build" }, null); 
// THIS IS WHERE THE MAGIC HAPPENS - IN PROCESS MSBUILD 
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, buildRequest); 
// A SIMPLE WAY TO CHECK THE RESULT 
if (buildResult.OverallResult == BuildResultCode.Success) 
{    
    //... 
} 
+0

예, http : // bogdangavril에서 해당 코드를 발견했습니다. wordpress.com/2012/03/15/take-control-of-msbuild-using-msbuild-api/ 나도 ...하지만 작동하지 않습니다. Visual Studio IDE에서 솔루션을 직접 만들 수있는 경우에도 항상 실패합니다. – Doc

+0

솔루션에 사용 된 모든 프로젝트가 있습니까? 참조/프로젝트 추가를 통해 참조 된 모든 dll을 (솔루션의 프로젝트에서 가져온) 추가 했습니까? 나는 이렇게 큰 솔루션을 컴파일했습니다 ... – Erwin

+0

예를 들어 csproj를 컴파일하는 것이 sln이 아니라 typo입니까? – Erwin

관련 문제