0

我正在尝试通过对 DEVENV.exe 进行脱壳来在 TFS 构建中构建 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

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

我尝试过重置环境设置(使用 /resetusersettings 标志)以及使用 /resetskippkgs 标志。没有任何效果。

有任何想法吗?

4

4 回答 4

4

当您使用 DevEnv 时,您是在构建那个特定的项目(.vdproj 文件),还是在构建解决方案?听起来 VS 正试图在构建机器上打开解决方案,而数据库和测试项目系统不存在。

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

于 2012-03-08T15:08:24.163 回答
3

从简单开始。除非您非常熟悉您要解决的问题,否则通常最好在将其作为 TFS 构建的一部分运行之前“手动”尝试。RDP 进入构建服务器并尝试在命令行运行必要的命令,看看会发生什么。您甚至可以比这更简单,将 RDP 放入构建机器并加载 Visual Studio 并构建它。

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

作为 TFS 构建的一部分,我正在使用以下 Exec 任务来精确执行您正在执行的操作。所以我知道这行得通。您的平台和配置可能会根据您正在构建的内容而有所不同。这样做的好处是您将在 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

于 2012-03-06T15:15:40.817 回答
0

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

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

我会先从http://wix.codeplex.com/下载 Wix

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

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

于 2012-03-09T14:48:07.813 回答
0

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

于 2012-03-09T13:45:34.783 回答