如何从C#代码以编程方式构建我的解决方案文件?

| 我有一个包含许多项目的大型解决方案,其中一个是安装项目。还有许多当前版本存储在单独的分支中。我有一个曾经在.NET 2中工作的构建工具,但是自从升级到.NET 4以来一直没有工作。 在内部,新的.NET 4版本的构建工具使用
Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections()
versionControlServer.GetAllTeamProjects(false)
从我的TFS源代码控制服务器中获取ѭ2collection的集合。 然后,我在UI中直观地显示它们,并且当用户单击特定的解决方案版本时,应用程序将调用以下命令以获取该解决方案版本的最新信息:
workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full, 
   GetOptions.GetAll);
用于构建解决方案文件的应用程序,其中包括Setup项目。在此阶段,安装项目将创建一个可以与应用程序一起安装的MSI。这是我遇到的最后一步。 我需要能够以编程方式构建用户使用C#代码选择的解决方案。可用的.NET 2代码如下:
Process process = new Process();
ProcessStartInfo processStartInfo = process.StartInfo;
processStartInfo.FileName = processName;
processStartInfo.Arguments = string.Format(\" \\\"{0}\\\" /BUILD \\\"Release|Any CPU\\\"\", 
   solutionPath);
processStartInfo.WorkingDirectory = processDirectory;
process.Start();
运行此命令时没有错误,但是它不再启动Visual Studio并生成代码。显然,这最初是一种糟糕的方法,但是我无法使用TFS类找到“正确”的方法。 我还尝试了直接运行MSBuild.exe(类似于上面的示例),这确实可以构建解决方案,但是由于某些原因,它不能构建产生MSI的安装项目。请注意,我不使用任何手动创建的构建文件。 不幸的是,很难找到有关Microsoft.TeamFoundation命名空间的有用文档!我希望这里有人可以使用这些类,并可以指导我解决此问题。 如果可能的话,我需要使用.NET类(例如,不是Process.Start),因为我真的需要知道构建何时完成。但是,如果要求太多,我可以为此设置一个“ 5”对象。     
已邀请:
        msbuild跳过安装程序项目,因为它不知道如何构建它们。 FinalBuilder会使用devenv.exe进行构建。 调用`devenv / build \“ Release | Any CPU \” / project \“ MyInstaller.vdproj \”应该从命令行运行所需的构建,而无需启动VS GUI。尝试一下! 说了这么多:我们也使用FinalBuilder,并且不推荐使用VS Installer,因此您可能要计划替换它。     
        事实证明,问题是完全不相关的。将要更新的.NET 2代码已将\ Program Files硬编码到devenv.exe文件路径中-但是新计算机是64位,并且Visual Studio 2010已安装到Program档案(x86)\中! 因此,这意味着上面的代码示例确实起作用,并且将允许我从C#构建解决方案。这不是我更喜欢这样做的面向对象的方式,但是在您提出所有意见之后,我很高兴能够使其完全正常工作。 谢谢大家的宝贵时间。     

要回复问题请先登录注册