2014-03-06 110 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