从TFS Build构建MSI

时间:2012-03-06 01:10:56

标签: visual-studio tfs msbuild windows-installer devenv

我试图通过shelling到DEVENV.exe来构建TFS Build中的MSI(因为MSBUILD不支持VSPROJ)。无论如何,我的第一个安装程序项目构建正常,第二个安装程序失败。如果我颠倒顺序,同样的事情发生(即错误不遵循项目)。查看输出,我收到以下错误:

Deserializing the project state for project '[MyProject].dbproj'
[MyProject].dbproj : error  : Error HRESULT E_FAIL has been returned from a call to a COM component.

另外,我得到:

Package 'Microsoft.VisualStudio.TestTools.TestCaseManagement.QualityToolsPackage, Microsoft.VisualStudio.QualityTools.TestCaseManagement, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' failed to load

看起来好像第一个构建试图序列化数据库项目(它说它成功了,但是在任何地方都没有DBML文件)。然后第二个构建尝试反序列化DB项目并失败。

我尝试重置env设置(使用/ resetusersettings标志)以及使用/ resetskippkgs标志。什么都行不通。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

开始简单。除非你精通这个问题,否则你试图解决它通常最好“手动”尝试它,然后再将它作为TFS构建的一部分运行。 RDP到构建服务器并尝试在命令行运行必要的命令,看看会发生什么。您甚至可以将其简化为RDP并进入构建计算机并加载Visual Studio并构建它。

底线是,如果你无法通过调用devenv.exe在Visual Studio或命令行中构建它,它将无法作为团队构建的一部分。

我正在使用下面的Exec任务来准确地完成您在TFS构建中所做的工作。所以我知道这很有效。您的平台和配置可能因您正在构建的内容而异。关于这一点的好处是你将在C:\ Temp \ MSIBuildOutputLog.txt中有一个日志文件,你可以分析其他错误和信息。

<Exec Command="&quot;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe&quot; &quot;$(PathToSolution)\solution.sln&quot; /Build &quot;Release|Mixed Platforms&quot; /out &quot;C:\Temp\MSIBuildOutputLog.txt&quot;" />

需要注意的一件重要事项...... VS2010中存在一个错误,当您尝试使用devenv.exe 在命令行运行时,会导致MSI生成失败。这花了我几天找到并弄清楚,但你需要这个修补程序。工作就像一个魅力...... http://archive.msdn.microsoft.com/KB2286556

答案 1 :(得分:3)

当您向DevEnv发送外壳时,您是在构建该特定项目(.vdproj文件),还是在构建解决方案?听起来VS试图在构建机器上打开解决方案,并且数据库和测试项目系统不存在。

您是否考虑过将设置项目移植到WiX?

答案 2 :(得分:0)

实际上,这是不支持msbuild的部署项目。 FWIW,这在Visual Studio的下一个版本中都已弃用,因此您可能希望现在开始查看InstallShield Limited Edition和/或Windows Installer XML,然后再花费太多时间处理死胡同,破碎的技术。这两种替代方案都具有适当的MSBuild支持以及许多其他改进。

答案 3 :(得分:0)

采用WIX(Windows Installer XML)可能会更好,更快,这是MS现在建议在VS / MSBuild / TFSBuild环境中使用来创建MSI的技术。

在VS解决方案中进行设置和集成相对容易。它使用基于XML的文件来描述您的MSI,并在编译时使用这些文件来创建MSI。

我首先从http://wix.codeplex.com/

下载Wix

安装完成后,您就可以使用基于Wix的项目的VS2010集成来创建MSI。要快速入门,只需在解决方案中添加一个新的Wix项目,并将您想要组合的输出项目引用到MSI中。接下来,您可以运行一个名为“Heat”的工具,该工具包含在Wix工具包中,通过扫描您的项目来生成XML文件。

获得这些XML文件后,将它们添加到Wix项目并进行编译。