2014-03-06 71 views
4

我正在寫一個控制檯應用程序來獲得從TFS服務器的解決方案,構建並在IIS上發佈Visual Studio解決方案,但我被困在大樓...建立從代碼

我發現這個代碼,它就像一個魅力

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

之前建立另外一個我不能建一個項目是否有爲什麼你需要編寫此buildrunner,而不是僅僅調用[的MSBuild(HTTP一個具體的理由:// MSDN .microsoft.com/en-us/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,錯字? – Erwin