directory.build.props和directory.build.targets在Windows Installer Wix项目中无法使用。 *.wixproj
如何解决这个问题?
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 函数手动导入扩展程序。您只需要执行一次即可。
在行 3 (应该是 <Project>
中的第一个元素) 处添加以下内容:
<Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))"
Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
请将以下内容添加到文件底部,在导入WiX目标之前: <Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.targets))"
Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.targets))')" />
如果您需要钩入WiX构建过程或目标,请使用CustomBeforeWixTargets和CustomAfterWixTargets构建属性,这些属性可能通过MSBuildThisFileFullPath保留属性引用directory.build.targets文件本身。这将确保WiX在适当的时间导入这些内容。配置完成后,使用directory.build.props和directory.build.targets将按预期进行。如果WiX有望原生支持这些构建扩展名,则您应该能够自由地删除这些显式导入。