我试图通过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标志。什么都行不通。
有什么想法吗?
答案 0 :(得分:3)
开始简单。除非你精通这个问题,否则你试图解决它通常最好“手动”尝试它,然后再将它作为TFS构建的一部分运行。 RDP到构建服务器并尝试在命令行运行必要的命令,看看会发生什么。您甚至可以将其简化为RDP并进入构建计算机并加载Visual Studio并构建它。
底线是,如果你无法通过调用devenv.exe在Visual Studio或命令行中构建它,它将无法作为团队构建的一部分。
我正在使用下面的Exec任务来准确地完成您在TFS构建中所做的工作。所以我知道这很有效。您的平台和配置可能因您正在构建的内容而异。关于这一点的好处是你将在C:\ Temp \ MSIBuildOutputLog.txt中有一个日志文件,你可以分析其他错误和信息。
<Exec Command=""C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" "$(PathToSolution)\solution.sln" /Build "Release|Mixed Platforms" /out "C:\Temp\MSIBuildOutputLog.txt"" />
需要注意的一件重要事项...... 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。
下载Wix安装完成后,您就可以使用基于Wix的项目的VS2010集成来创建MSI。要快速入门,只需在解决方案中添加一个新的Wix项目,并将您想要组合的输出项目引用到MSI中。接下来,您可以运行一个名为“Heat”的工具,该工具包含在Wix工具包中,通过扫描您的项目来生成XML文件。
获得这些XML文件后,将它们添加到Wix项目并进行编译。