我在Visual Studio中有一个解决方案,其中包含一个共享属性表,其中包含需要为每个项目执行的构建后事件命令(bar
)。在Visual Studio中继承后构建事件?
Foo.props>通用属性>生成事件>生成后事件> 命令行=酒吧
我如何再指定其他具体项目生成后事件?通常的“继承父项目或项目默认值”缺失,我宁愿不必手动将bar
添加到每个单个项目中,因为它很难维护。
我在Visual Studio中有一个解决方案,其中包含一个共享属性表,其中包含需要为每个项目执行的构建后事件命令(bar
)。在Visual Studio中继承后构建事件?
Foo.props>通用属性>生成事件>生成后事件> 命令行=酒吧
我如何再指定其他具体项目生成后事件?通常的“继承父项目或项目默认值”缺失,我宁愿不必手动将bar
添加到每个单个项目中,因为它很难维护。
基于此post,似乎不可能。你前一段时间发布了你的问题;你有没有设法找到一个可行的选择?
反馈后编辑: 一个潜在的混乱的替代方法是定义你的命令宏:
<!-- 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 tasks;特别是,Exec task可能会提供最可行的解决方案。
找到该解决方案并查看其他帖子后。我发现不可能理解为什么VC++团队会离开这个功能。
查看属性页的宏后,可以使用%(Command)宏/环境变量包含来自先前属性的命令。这适用于所有构建事件。
PropertySheet1.props
copy some.dll $(OutputPath)
%(Command)
PropertySheet2.props
copy other.dll $(OutputPath)
%(Command)
结果的所有命令被执行。
这很好。感谢你! – Bklyn 2015-06-18 13:58:59
由于一些生成后事件没有从他们定义的属性表中继承,所以我质疑鸭子并且在这里降落。
我有好消息: 由于Visual Studio的2013年,预生成和生成后事件命令行“由父母或项目默认继承”选项,这将增加从属性表中的所有事件都有了。
(与Visual Studio 2013和2017年专业测试)
不,我已经使出分别手动维护每一个项目,按我的问题。我想过的唯一的解决方案(但没有试图实现)是通过脚本设计我自己的继承结构 - 让每个项目调用与其生成后事件相同的脚本,但将项目名称作为变量传递,并让脚本根据需要运行其他命令。笨重,但至少它减少了维护只是一个文件。 – JBentley 2013-12-09 15:43:22
或者,让每个项目都调用它自己的脚本(通过使用MSVC的内置宏来从依赖于项目的位置调用脚本),并让脚本从它们继承的项目中递归地调用脚本。这两种方法的主要问题是继承结构本身必须在两个地方(属性表和脚本)中更新,否则它们会失去同步。 – JBentley 2013-12-09 15:45:04