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)”