MSBuild:directory.build.props和directory.build.targets不适用于* .wixproj

时间:2019-06-10 17:54:28

标签: msbuild wix

directory.build.props和directory.build.targets不适用于Windows Installer Wix项目。 * .wixproj

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

背景

directory.build.props directory.build.targets 的隐式导入是MSBuild 15.0+的固有功能。它必须不必使用新的SDK项目样式格式才能运行。 魔术通过导入 microsoft.common.props 发生,SDK样式项目会自动执行,大多数较旧样式的项目会作为第一个导入项目文件。已记录在here中。

不幸的是,WiX项目不包括此导入,这就是为什么不对其进行提取的原因(如Votive源中的here所示)。我不能说为什么,但是 microsoft.common.props 可能被排除在外。

由于尚不清楚是否导入 microsoft.common.props 会引起您的痛苦,因此建议的方法是使用新的 GetPathOfFileAbove手动导入扩展名

解决方案

  1. 使用卸载项目,右键单击项目→卸载{name}…
  2. 右键单击项目→编辑{name}…
  3. 第3行中添加以下内容(应为<Project>中的第一个元素):

    <Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))"
            Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
    
  4. 在导入WiX目标之前之前,在文件底部添加以下内容:

    <Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.targets))"
            Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.targets))')" />
    
  

如果您需要加入WiX构建过程或目标,请使用 CustomBeforeWixTargets CustomAfterWixTargets 构建属性,这些属性可能引用 directory.build。通过 MSBuildThisFileFullPath 保留属性定位文件本身。这将确保WiX在适当的时间导入内容。

配置完成后,将按预期使用 directory.build.props directory.build.targets 。如果WiX原生支持这些构建扩展,那么您将结盟,并可以在闲暇时删除这些显式导入。