bar
我在 Visual Studio 中有一个解决方案,其中我有一个共享属性表,其中包含一个需要为每个项目执行的构建后事件命令 ( )。
Foo.props > Common Properties > Build Events > Post-Build Event > Command Line = bar
然后如何指定其他特定于项目的构建后事件?缺少通常的“从父级或项目默认值继承”,我宁愿不必手动添加bar
到每个项目,因为它很难维护。
bar
我在 Visual Studio 中有一个解决方案,其中我有一个共享属性表,其中包含一个需要为每个项目执行的构建后事件命令 ( )。
Foo.props > Common Properties > Build Events > Post-Build Event > Command Line = bar
然后如何指定其他特定于项目的构建后事件?缺少通常的“从父级或项目默认值继承”,我宁愿不必手动添加bar
到每个项目,因为它很难维护。
在找到此解决方案并查看其他帖子后。我发现无法理解为什么 VC++ 团队会忽略此功能。
在查看属性页的宏后,您可以使用 %(Command) 宏/环境变量包含来自先前属性的命令。这适用于所有构建事件。
PropertySheet1.props
copy some.dll $(OutputPath)
%(Command)
PropertySheet2.props
copy other.dll $(OutputPath)
%(Command)
导致所有命令都被执行。
根据这篇文章,这似乎是不可能的。您不久前发布了您的问题;您是否设法找到可行的替代方案?
反馈后编辑:一个潜在的混乱选择是将您的命令定义为宏:
<!-- CommandX.props -->
<PropertyGroup>
<CommandX>bar</CommandX>
</PropertyGroup>
然后您可以添加$(CommandX)
到项目的构建后命令或另一个属性表。如果$(CommandX)
不存在,它会被悄悄地忽略。
如果将此宏添加到另一个属性表,那么您必须Import
在CommandX
属性表中$(CommandX)
继承一个值:
<!-- Some-Other-Property-Sheet.props -->
<ImportGroup Label="PropertySheets">
<Import Project="CommandX.props" />
</ImportGroup>
在了解了更多关于构建过程的信息后,我想推荐使用MSBuild 任务;特别是,Exec 任务可能提供最可行的解决方案。
由于一些构建后事件没有从它们定义的属性表继承,我质疑鸭子并降落在这里。
我有个好消息:自 Visual Studio 2013 起,Pre-Build 和 Post-Build 事件命令行有一个“从父级或项目默认值继承”选项,它添加了属性表中的所有事件。
(使用 Visual Studio 2013 和 2017 Professional 测试)