WIX 项目无法加载指定的预构建事件

Posted

技术标签:

【中文标题】WIX 项目无法加载指定的预构建事件【英文标题】:WIX Project cannot load with pre-build-event specified 【发布时间】:2013-05-22 15:09:49 【问题描述】:

经过很多麻烦,我有一个 heat.exe 命令字符串应该运行并将文件夹的文件放入 WXS 文件中。

看起来像这样

heat dir "$(var.SolutionDir)Web\obj\$(var.MyProject.Configuration)Package" -gg -g1 -cg PACKAGEFILES sreg -dr DEPLOYFOLDER -var "$(var.SolutionDir)Web\obj\$(var.MyProject.Configuration)Package" -out "$(var.SolutionDir)WebInstaller\PackageFragment.wxs"

我用这个得到它:http://weblogs.sqlteam.com/mladenp/archive/2010/02/23/WiX-3-Tutorial-Generating-filedirectory-fragments-with-Heat.exe.aspx

但是,当我尝试将其复制到我在 VS2010 中的 WIX 项目的“属性->构建事件”下的预构建事件框中时 - VS2010 崩溃并且我无法加载我的项目,直到我直接从项目中删除命令文件xml代码。

我现在有两个问题:

    这个命令字符串正确吗? 为什么我的项目会这样崩溃?

提前谢谢大家。

【问题讨论】:

【参考方案1】:

项目崩溃是因为 Visual Studio 试图将 $(stuff) 解释为 MSBuild 属性,结果一头雾水并崩溃。

您需要通过直接编辑 .wixproj 文件将该命令行转换为 MSBuild 语法。这样您就可以绕过崩溃的 Visual Studio 中的解析代码。比如:

<Exec Command='heat dir "..\Web\obj\$(Configuration)Package" -gg -g1 -cg PACKAGEFILES sreg -dr DEPLOYFOLDER -var "..\Web\obj\$(Configuration)Package" -out "..\WebInstaller\PackageFragment.wxs"'

注意:$(var.SolutionDir) 仅在 Visual Studio 中构建时可用,因此我建议不要使用它(在上面的示例中,我将其设为相对路径)。

【讨论】:

向片段元素添加 Heat 命令属性是否有意义,以便它在编译时自行创建? 否,因为编译阶段今天不接触磁盘。

以上是关于WIX 项目无法加载指定的预构建事件的主要内容,如果未能解决你的问题,请参考以下文章

AutoTokenizer.from_pretrained 无法加载本地保存的预训练标记器 (PyTorch)

引用 SSDT 项目的 WiX 项目无法在 TFSBuild 中构建 - 未定义的预处理器变量“$(var.DatabaseProject.TargetDir)”

C# 使用 liblas.dll(无法加载 DLL)

为什么ajax加载出来的html,无法用选择器绑定事件?

WiX 自定义操作项目 - BadImageFormatException

通过 gradle 构建后无法找到或加载主类