【问题标题】:WIX Project cannot load with pre-build-event specifiedWIX 项目无法加载指定的预构建事件
【发布时间】: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. 这个命令字符串正确吗?
  2. 为什么我的项目会这样崩溃?

提前谢谢大家。

【问题讨论】:

    标签: visual-studio-2010 wix


    【解决方案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 命令属性是否有意义,以便它在编译时自行创建?
    • 否,因为编译阶段今天不接触磁盘。
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2016-05-09
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多