67

我在本地机器上遇到了一些奇怪的 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,UPDATE DirectorySET _Profile= 0
错误 LGHT0204:ICE64:ICE 内部错误 1001。返回的 API :1615。
错误 LGHT0204:ICE64:错误 2242:OU.AppFramework.Includes.msi,_Profile,ALTER TABLE DirectoryADD _ProfileSHORT TEMPORARY HOLD
错误 LGHT0204:ICE91:ICE 内部错误 1001。API 返回:1615。
错误 LGHT0204:ICE91:错误 2242: OU.AppFramework.Includes.msi, _Profile, ALTER TABLE DirectoryADD _ProfileSHORT TEMPORARY HOLD

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

更新 2:

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

错误 LGHT0204:ICE30:ICE 内部错误 100。返回的 API:1615。
错误 LGHT0204:ICE30:错误 2235:AppFramework.Includes.msi, _ICE30SFN, SELECT Directory_Parent, Directory, DefaultDir, _ICE30SFN, _ICE30LFNFROM DirectoryWHERE DirectoryDirectory=?和Directory_Parent<>?

更新 3:

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

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

4

6 回答 6

63

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

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

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

于 2014-03-12T10:18:14.180 回答
48

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

简短的回答:

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

长答案:

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

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

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

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

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

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

于 2013-08-06T10:26:46.147 回答
18

对于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. 打开解决方案并重新编译。

祝你好运!

于 2013-03-14T15:57:30.200 回答
10

我也遇到过同样的问题。在项目属性中,转到Tool Settings并单击Suppress ICE validation

在此处输入图像描述

于 2013-02-20T23:21:38.857 回答
3

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

于 2017-01-23T15:39:17.507 回答
1

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

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

于 2014-03-04T17:54:49.247 回答