【问题标题】:WiX ICE validation errorsWiX ICE 验证错误
【发布时间】:2013-01-30 12:36:44
【问题描述】:

我在本地机器上遇到了一些奇怪的 WiX 问题。问题是间歇性的,但在对解决方案进行了几次重建后,WiX 项目开始抛出 ICE 验证错误。

如果我进入我的 AppData\Local\Temp 文件夹并删除所有包含 MSI 的临时文件夹,则解决方案会再次编译。不久之后,问题又开始发生了。必须不断清理临时文件夹不是一个可持续或令人满意的解决方案。

还有其他人遇到过这个问题吗?验证错误代码似乎总是 ICE30、ICE38、ICE64 和 ICE91 的组合

更新:

根据要求,以下是最近失败的条目:

错误 LGHT0204:ICE38:ICE 内部错误 1002。API 返回: 1615.
错误 LGHT0204:ICE38:错误 2235:/OU.AppFramework.Includes.msi,_Profile,更新Directory SET _Profile=0
错误 LGHT0204:ICE64:ICE 内部错误 1001。API 返回:1615。
错误 LGHT0204:ICE64:错误 2242: OU.AppFramework.Includes.msi, _Profile, ALTER TABLE Directory ADD _Profile SHORT TEMPORARY HOLD
错误 LGHT0204: ICE91: ICE 内部错误 1001。API 返回:1615。
错误 LGHT0204:ICE91: 错误 2242:OU.AppFramework.Includes.msi、_Profile、ALTER TABLE Directory ADD _Profile 短暂停

有趣的是,这个失败发生在我昨晚离开办公室之前,今天早上我进来的时候,解决方案编译好了。由于它似乎以 WiX 构建 MSI 的临时目录为中心,是否是构建过程锁定了文件?

更新 2:

现在我们又回到了 600 多个错误,大部分是重复此错误:

错误 LGHT0204:ICE30:ICE 内部错误 100。API 返回:1615。
错误 LGHT0204:ICE30:错误 2235:AppFramework.Includes.msi, _ICE30SFN, 选择 Directory_Parent, Directory, DefaultDir, _ICE30SFN, _ICE30LFN FROM Directory WHERE Directory.Directory=?和Directory_Parent?

更新 3:

即使尝试了@limpan 的建议,问题仍然存在。当 light 尝试访问 MSI 时,由于 MSI 输出文件夹被锁定,light 会发出一些警告:

警告 549 目录 '\AppData\Local\Temp\2opu3hxf' 正在使用中,无法删除。灯光.exe

【问题讨论】:

  • 能否请您给我们看一下日志文件。 ICE30 可能是由安装中的重复文件引起的。
  • 你查到这件事的真相了吗?我有类似的问题
  • 并非如此。我已经从我的 Debug 配置中删除了 WiX 项目的构建,如果我在 Release 中编译还没有看到错误,但实际上并没有解决问题

标签: wix ice-validation


【解决方案1】:

尝试将<RunWixToolsOutOfProc>true</RunWixToolsOutOfProc> 添加到您的 WiX 项目文件中。

我们遇到同样的问题已经有一段时间了,并尝试了各种解决方法,包括删除临时文件和设置 msbuild 环境变量。这些似乎都工作了一段时间,但最终(有时几天后)问题会再次出现。

我注意到在我的机器上 devenv.exe 是锁定 light.exe 试图删除的文件的进程。我还偶然发现了一个不相关的thread,它提到了这个项目设置,以使 WiX 工具耗尽进程。我认为这值得一试,它似乎已经为我们解决了这个问题(到目前为止......)

【讨论】:

  • 哇将它添加到我的 Setup.proj 文件中,再也没有遇到过这个问题。非常感谢,不得不关闭 Visual Studio,删除临时 .msi 文件并重新加载 Visual Studio,这很烦人。
  • 这是对我有用的解决方案。非常感谢!
  • 也为我工作。非常感谢!
  • 对于那些不确定标签是否在文件顶部的<PropertyGroup></PropertyGroup>标签内的人
  • 进一步说明:将 true 添加到 .wixproj 文件中的第一个 PropertyGroup。
【解决方案2】:

我也遇到了这个问题,并在我的环境中解决了它。

简答:

添加环境变量MSBUILDDISABLENODEREUSE=1并重启​​Visual Studio

长答案:

在构建过程中出现了一个警告,因为我太专注于错误,所以我第一次没有看到:

删除临时目录失败:C:\Users[username]\AppData\Local\Temp\5[uniqueFolderName] light.exe

我尝试手动删除该文件夹,但它正被另一个进程使用。

事实证明,很多 MSBuild.exe 进程在构建期间启动,然后没有再次关闭。 您可以在 Stack Overflow 问题 msbuild.exe staying open, locking files 中阅读更多关于其原因以及如何改变这种行为的信息。

这个线程:它和这个线程中的解决方案:

我希望这个答案可以帮助别人。

【讨论】:

  • 终于设法回到这个问题上。看起来您的建议可能已经解决了@limpan 的问题。我已经要求团队添加环境变量并关注一两天的事情。如果没有人有任何问题,那么我会这样做!
  • 经过进一步调查,我们似乎没有问题。团队中的其他开发人员在添加环境变量后仍然报告 WiX 错误,因此尚未完全解决问题
【解决方案3】:

对于 ICE30: ICE Internal Error 100. API Returned: 1615,请试试这个看看它是否有效:

  1. 关闭 Visual Studio 的所有实例(可能只是一个重要的实例,但以防万一)
  2. 转到C:\Documents and Settings\\****user id****\\Local Settings\Temp\。
  3. 清除所有看起来像这样的文件夹..“s12qgaks”。基本上它包含MSI 文件
  4. 打开解决方案并重新编译。

祝你好运!

【讨论】:

  • 谢谢马努。不幸的是,正如我的问题所指出的那样,我每次都已经经历过。
  • 对我来说,即使我是管理员,我也没有该目录的权限。我必须拥有所有权。
【解决方案4】:

我也遇到过同样的问题。在项目属性中,转到工具设置并单击禁止 ICE 验证。

【讨论】:

  • 是的,谢谢 Sunil - 我发现了这一点,但我宁愿尝试找到问题的根本原因,而不仅仅是压制它。它没有发生在任何其他开发人员的机器上,所以这可能与我的设置有关。如果我在这里无法得到任何具体答案,我可以取消验证,但是当我检查项目文件时,这会影响到每个人
【解决方案5】:

对我来说,MSBUILDDISABLENODEREUSE=1(或命令行上的 /nr:false)并没有解决问题。 但是 true 完成了它的工作。

【讨论】:

    【解决方案6】:

    我遇到了同样的问题。原来是我的防病毒软件(防毒墙网络版)它锁定了由 Light.exe 创建的中间文件,验证过程失败。从病毒扫描中排除临时文件夹或关闭 ICE 验证不是可接受的解决方案。

    如果有人有更好的解决方案。我想知道。

    【讨论】:

    • 有趣 - 谢谢@Mathew。不幸的是,我现在已经离开了那份合同,所以可能永远都不会查到这份合同的底部......
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多