gpt4 book ai didi

msbuild - Visual Studio和MSBuild在WiX项目上以不同的方式触发BeforeBuild

转载 作者:行者123 更新时间:2023-12-04 07:29:22 25 4
gpt4 key购买 nike

我有一个WiX(Windows安装程序XML)v3项目,其中包含对我的解决方案中其他项目的引用。我在WiX项目的BeforeBuild事件中使用复制任务来收集引用项目的一些输出,以供以后使用Heat使用。

当我在Visual Studio中构建WiX项目(不是解决方案)时,每个引用的项目都是在WiX项目之前构建的,一旦构建它们,WiX项目上的BeforeBuild事件就会触发,然后构建WiX项目本身。这是我期望的行为-我能够从WiX BeforeBuild中的引用项目的bin目录中访问文件,并在WiX项目执行Candle之前随意使用它们。

我遇到的问题是,当我通过MSBuild构建WiX文件时,我发现在任何引用的项目之前,BeforeBuild事件会立即触发。这种行为上的差异意味着从命令行进行构建时,我无法利用引用项目的输出。

为什么在命令行上通过MSBuild运行到Visual Studio内部时,BeforeBuild在不同的时间点执行?

最佳答案

如果要在Visual Studio中构建,则使用解决方案依赖项(可以是显式的,也可以基于项目引用)来确定需要构建的项目,并为每个项目启动一个单独的构建。这是必需的,因为解决方案还可以包含未使用MSBuild构建的项目,而其他项目在解决方案中为其设置了显式依赖项。副作用是,每个项目都被视为独立版本,从而为您确保正确的BeforeBuild顺序。

如果使用MSBuild从命令行进行构建,则在ResolveReferences目标期间将解析(并在必要时进行构建)依赖项项目。 BeforeBuild目标和PreBuild事件(从PreBuildEvent目标执行)都在ResolveReferences目标之前执行。因此,从属项目BeforeBuild目标最终在执行从属项目的构建之前开始执行。

请注意,从单个项目的角度来看,BeforeBuild目标在解决依赖项之前确实有意义,因为依赖项解析本身可能取决于BeforeBuild目标输出。例如,BeforeBuild可能执行自定义脚本以从SCM获取任何依赖项项目的最新副本。

关于msbuild - Visual Studio和MSBuild在WiX项目上以不同的方式触发BeforeBuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com