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

Xav*_*ohn 3 msbuild wix

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

如何解决这个问题?

Chr*_*nez 7

背景

directory.build.propsdirectory.build.targets的隐式导入是 MSBuild 15.0+ 的固有特性。它并没有一定要在新的SDK项目样式的格式为它工作。在魔术通过进口情况microsoft.common.props,其SDK风格的项目自动完成,最老式的项目包括在项目文件中的首次进口。这在此处记录

不幸的是,维克斯项目不包括此导入,这就是为什么它没有被拾起(如图所示这里在还愿源)。我不能说为什么,但可能有一个原因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))')" />
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在导入 WiX 目标之前,在文件底部添加以下内容:

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

如果您需要连接到 WiX 构建过程或目标,请使用CustomBeforeWixTargetsCustomAfterWixTargets构建属性,它们可能通过MSBuildThisFileFullPath保留属性引用directory.build.targets文件本身。这将确保 WiX 在适当的时间导入内容。

配置完成后,directory.build.propsdirectory.build.targets的使用将如预期的那样。如果 WiX 本来就支持这些构建扩展,那么您将保持一致,并且应该能够在闲暇时删除这些显式导入。