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

She*_*dan 4 c# build solution visual-studio-2010 tfs2010

我有一个包含许多项目的大型解决方案,其中一个是安装项目.还有许多当前版本存储在单独的分支中.我有一个曾经在.NET 2中工作的构建工具,但自从我们升级到.NET 4以来一直没有用.

在内部,构建工具的新.NET 4版本使用Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections()并从我的TFS源控制服务器versionControlServer.GetAllTeamProjects(false)获取TeamProjects 的集合.

然后,我在UI中以可视方式显示它们,当用户单击特定解决方案版本时,应用程序调用以下内容以获取该解决方案版本的最新信息:

workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full, 
   GetOptions.GetAll);
Run Code Online (Sandbox Code Playgroud)

用于构建解决方案文件的应用程序,包括安装项目.在此阶段,安装项目将创建可以安装应用程序的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();
Run Code Online (Sandbox Code Playgroud)

运行此命令时没有错误,但它不再启动Visual Studio并构建代码.很明显,这是一个很难做到最初的方法,但我找不到使用TFS类的"正确"方法.

我也尝试直接运行MSBuild.exe(类似于上面的例子),这确实构建了解决方案,但由于某种原因没有构建产生MSI的安装项目.请注意,我不使用任何手动创建的构建文件.

不幸的是,很难找到Microsoft.TeamFoundation命名空间的有用文档!我希望这里有人利用这些课程,并指导我解决这个问题.

如果可能的话,我需要使用.NET类(例如,不是Process.Start),因为我真的需要知道构建何时完成.但是FileSystemWatcher,如果这个问题太多,我可以为此设置一个对象.

Cra*_*ntz 5

msbuild会跳过安装程序项目,因为它不知道如何构建它们.FinalBuilder发送到devenv.exe来构建这些.

调用`devenv/build'发布|任何CPU"/项目"MyInstaller.vdproj"都应该从命令行运行你需要的构建,而无需启动VS GUI.试试吧!

尽管如此:我们也使用FinalBuilder,并且不推荐使用VS Installer,因此您可能希望计划更换它.